根据类成员对同一密钥的多映射元素进行排序
Sort multimap elements of the same key based on a class member?
我有一个存储在 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_type
是key_type
),如果您只需要像这样的绘制片刻,以用于特定操作。它在这里很好。
相关文章:
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 删除映射和分割错误中的一个过去结束元素
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- 访问映射向量的映射元素(c++)
- 为什么 unordered_map::equal_range upper_bound 如果键小于第一个映射元素,则返回
- 根据类成员对同一密钥的多映射元素进行排序
- C++查找并擦除多映射元素
- C++ for_each循环找不到指向映射元素
- 创建映射元素时,请避免使用值副本
- 从常量迭代器到映射向量,获取映射向量中映射元素的键和值
- c++中如何更改映射元素的值
- 传递对映射元素的引用作为参数
- 如果没有找到映射元素将返回什么
- 不能访问指针-向量映射元素
- 存储内部排序映射元素的最快方式
- 无序多映射元素插入
- 哈希映射元素的值未正确打印
- 修改所有映射元素的键
- 复制映射元素的正确方法