根据类成员对同一个键的多图元素进行排序?

时间:2017-03-09 13:46:18

标签: c++ c++11 dictionary std stdmap

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

中的类S.
class S{
    int _secondKey{0};
    int _thirdKey{0};
};

我想存储相同键的元素,根据_secondKey类成员和_thirdKey成员进行排序。

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

2 个答案:

答案 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_typekey_type)只是片刻进行特定的操作。很好地展示了here