根据类成员对同一密钥的多映射元素进行排序

Sort multimap elements of the same key based on a class member?

本文关键字:映射 元素 排序 密钥 成员      更新时间:2023-10-16

我有一个存储在 std::multimap<int, S>中的类S:

class S{
    int _secondKey{0};
    int _thirdKey{0};
};

我想存储基于_secondKey类成员的同一密钥的元素,然后是_thirdKey成员。

这可以在C 中做吗?我正在使用GCC 5.3

可能的解决方案是具有std::map<int,std::vector<S>>而不是std::multimap<int, S>并在插入时按照需要进行排序:

 S newvalue = ...;
 auto &v = mymap[ newvalue._secondKey ];
 auto it = std::lower_bound( v.begin(), v.end(), newvalue, thirdKeyCmp );
 v.insert( it, newvalue );

或简单地将std::set<S>与自定义比较器一起按第二关键进行分类:

bool cmpS( const S &s1, const S &s2 ) {
     return std::tie( s1._secondKey, s1._thirdKey ) < std::tie( s2._secondKey, s2._thirdKey );
}
using myset = std::set<S,cmpS>;

是不可能的,但是您可以使用键和值翻转的另一个std::multimap对象(因此value_typekey_type),如果您只需要像这样的绘制片刻,以用于特定操作。它在这里很好。