在map中使用vector的size_type

时间:2015-05-22 03:00:02

标签: c++ c++11

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”版本时出现错误。

1 个答案:

答案 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);

其中argvector<int>或可以转换为vector<int>的内容。

m1[str].insert(std::vector<int>{5, 10, 30});