我有一个存储在std::multimap<int, S>
:
class S{
int _secondKey{0};
int _thirdKey{0};
};
我想存储相同键的元素,根据_secondKey
类成员和_thirdKey
成员进行排序。
这可以用C ++做吗?我正在使用GCC 5.3
答案 0 :(得分:1)
可能的解决方案是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>;
答案 1 :(得分:0)
这是不可能的,但如果您需要按照这样排序的地图,您可以创建另一个std::multimap
对象,其中键和值会被翻转(以便value_type
为key_type
)只是片刻进行特定的操作。很好地展示了here。