Ich dachte an so etwas:
#include<iostream>
#include<set>
using namespace std;
class foo
{
int wert1;
double wert2;
bool sort_wert2;
public:
explicit foo(int wert1): wert1(wert1), sort_wert2(false){}
foo(int wert1, double wert2): wert1(wert1), wert2(wert2), sort_wert2(true){}
friend bool operator<(const foo& a, const foo& b)
{
if (a.wert1<b.wert1) return true;
if ((a.wert1==b.wert1) && a.sort_wert2 && b.sort_wert2)
if (a.wert2<b.wert2) return true;
return false;
}
friend ostream& operator<<(ostream &out, const foo& a)
{
out<<'('<<a.wert1<<','<<a.wert2<<')';
return out;
}
};
int main()
{
multiset<foo> foos;
foos.insert(foo(3,2));
foos.insert(foo(3,3));
foos.insert(foo(3,4));
foos.insert(foo(1,2));
foos.insert(foo(1,3));
foos.insert(foo(1,4));
foos.insert(foo(2,4));
foos.insert(foo(2,3));
foos.insert(foo(2,2));
cout<<"In sortierter Reihenfolge:\n";
for (multiset<foo>::iterator it=foos.begin(); it!=foos.end(); ++it)
cout<<(*it)<<'\n';
cout<<'\n';
cout<<"Ist (3,1) enthalten?\n";
if (foos.count(foo(3,1))) cout <<"Ja\n\n";
else cout <<"Nein\n\n";
cout<<"Ist (3,2) enthalten?\n";
if (foos.count(foo(3,2))) cout <<"Ja\n\n";
else cout <<"Nein\n\n";
cout<<"Sind (4,*) enthalten?\n";
if (foos.count(foo(4))) cout <<"Ja, und zwar "<< foos.count(foo(4)) <<" Stück \n\n";
else cout <<"Nein\n\n";
cout<<"Sind (2,*) enthalten?\n";
if (foos.count(foo(2))) cout <<"Ja, und zwar "<< foos.count(foo(2)) <<" Stück \n\n";
else cout <<"Nein\n\n";
cout<<"Alle (2,*):\n";
pair<multiset<foo>::iterator, multiset<foo>::iterator> ret = foos.equal_range(foo(2));
for (multiset<foo>::iterator it=ret.first; it!=ret.second; ++it)
cout<<(*it)<<'\n';
}