using line_nm = vector<string>::size_type;
map<string, set<line_nm>> m;
在上面的代码中,为什么我不能使用下面的代码?
map<string, set<vector<int>>> m1;
测试:
string str;
word[str].insert(5);
当我使用“m1”版本时出现错误。
答案 0 :(得分:4)
vector<string>::size_type
是一个完整的类型。
因此,
map<string, set<line_nm>> m;
类似于:
map<string, set<size_t>> m;
m[str]
会返回set<size_t>
的引用,其insert()
方法期待size_t
。这就是你可以使用的原因:
m[str].insert(5);
使用时:
map<string, set<vector<int>>> m1;
m1[str]
会返回对set<vector<int>>
的引用,其insert()
方法期待vector<int>
,而不是int
。这就是你不能使用的原因:
m1[str].insert(5);
你可以使用
m1[str].insert(arg);
其中arg
是vector<int>
或可以转换为vector<int>
的内容。
m1[str].insert(std::vector<int>{5, 10, 30});