在STL中,我能否在map中使用vector?

3
我可以声明一个类似这样的映射吗?
map<string, vector<string>> mymap;

我认为它适用。

然而,事实证明并非如此。

我尝试过

map<string, vector<string>*> mymap;

然后就可以了。

这是什么规则?

2个回答

17

你需要一个额外的空格:

map<string, vector<string> > mymap;
                          ^ see the extra space

没有额外的空格,>>会被解析为右移操作符。

C++0x中修改了规则,使得额外的空格变得不必要。一些编译器(例如Visual C++ 2008及以上版本)已经不需要额外的空格了。


2
g++ 给出了这个友好的错误提示:在嵌套的模板参数列表中,'>>' 应该改为 '> >'。 - anon
1
实际上,它是 std::map<std::string, std::vector<std::string> >,但我意识到我在这里已经失败了。 - sbi
@sbi:虽然我们在苛求,但你怎么知道它是std::?也许他写了自己的命名空间。或者他使用了using namespace std;甚至是using std::string;using std::map; ;) 出于好奇,为什么要用“十字军东征”来表示资格认证呢? - Stephen
1
@Stephen:那些在嵌套模板中失败(尴尬的)>>的人不会编写与std lib相匹配的自己的C++容器。(如果他们这样做了,上帝保佑我们。)至于using namespace std,请参见此答案 - sbi
@sbi:是的,我只是在跟你开玩笑而已 ;) 感谢提供链接,这些论点很有说服力。 - Stephen

9
你可以像 James 提到的那样。愚蠢的 C++解析 :)
然而,map<string, vector<string> > 实际上是一个 multimap<string, string>。一个multimap把一个键映射到多个值。它可能更加方便或者更有效,具体取决于你的使用情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接