std :: multimap не гарантирует этого.
Если вы можете выразить operator<
, используя целое число через функцию, например, int A::orderingInt()
, вы можете использовать
std::multiset<MyCustom> myset;
с
class MyCustom : public std::vector<A> {}
с перегрузкой
bool operator<(const MyCustom& a, const MyCustom& b) {
// theoretically empty MyCustom should not occure
return a[0].orderingInt() < b[0].orderingInt();
}
Конечно, добавление и итерация теперь будут другими:
A a;
myset[a.orderingInt()].push_back(a);
// groups with "small" elements first
for(std::multiset<MyCustom>::iterator it=myset.begin(); it!=myset.end(); it++) {
// those elements are "equal"
for(std::vector<A>::iterator jt=it->begin(); jt->end(); jt++) {
// use A& a = *jt;
}
}