按值对 std::map 进行排序
按值对 std::map 进行排序需要使用标准 sort() 函数的替代方法仅按键对元素进行排序。要实现此目的,请考虑以下解决方案:
翻转键和值
使用以下命令创建一个新的多重映射,翻转原始映射的键和值对函数:
template<typename A, typename B> std::multimap<B,A> flip_map(const std::map<A,B> &src) { std::multimap<B,A> dst; std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), flip_pair<A,B>); return dst; }
用法:
创建原始地图后(例如,std::map
std::multimap<double, int> dst = flip_map(src);
通用关联源
此解决方案可以推广到使用可变参数模板与任何关联容器一起使用:
template<typename A, typename B, template<class,class,class...> class M, class... Args> std::multimap<B,A> flip_map(const M<A,B,Args...>&src) { std::multimap<B,A> dst; std::transform(src.begin(), src.end(), std::inserter(dst, dst.begin()), flip_pair<A,B>); return dst; }
这适用于 std::map 和 std::unordered_map 作为源翻盖的。
以上是如何按值而不是键对 std::map 进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!