【发布时间】:2019-11-10 14:01:29
【问题描述】:
我有一个由键(类型字符串)和数据(类型元组)组成的映射。 我尝试使用 lambda 对我的地图进行排序(请参见下面的代码),但是当我编译时出现错误提示
严重性代码描述项目文件行抑制状态 错误 C2676 二进制“-”:“const std::_Tree_unchecked_iterator>>>”未定义此运算符或转换为预定义运算符可接受的类型 和 [ _Kty=std::字符串, _Ty=std::tuple ] SandBox C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\include\algorithm 3466
严重性代码描述项目文件行抑制状态 错误 C2672 '_Sort_unchecked': 找不到匹配的重载函数 SandBox C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\include\algorithm 3466
我的代码:
#include <iostream>
#include <string>
#include <tuple>
#include <map>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
int main() {
std::vector<std::string> strarr { "zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"};
int length = strarr.size();
std::string str = "";
map<string, tuple<int, int>> myMap;
for (int i = 0; i < length; i++)
myMap[strarr[i]] = make_tuple(strarr[i].length(), ++(get<1>(myMap[strarr[i]])));
typedef std::function<bool(std::pair<string, tuple< int, int >>, std::pair<string, tuple< int, int >>)> Comparator;
Comparator compFunctor =
[](std::pair<string,tuple< int, int>> el1, std::pair<string, tuple< int, int >> el2)
{
return (get<0>(el1.second) < get<0>(el2.second));
};
std::sort(myMap.begin(), myMap.end(), compFunctor);
}
那么错误是什么?我确信这很愚蠢,但我自己无法弄清楚。
提前谢谢你。
【问题讨论】:
-
std::map 自动按键排序,因此您不能按值对该映射进行排序。您需要的是第二张翻转的地图。然后你有两个地图,可以包含在一个“多地图”中,如stackoverflow.com/a/5056797/5652483所示
-
多图的另一个名称是“BiMap”。请参阅gist.github.com/ScottHutchinson/… 的实现