`auto-increment` std :: map :)
问题描述:
好吧,问题很简单 - 我正在读取输入流中的单词,这些单词可能会重复。我需要填充一张地图,以便所有单词的索引从0到n-1。 这里是我的代码:`auto-increment` std :: map <string, int> :)
map<string, int> mp;
string s;
int n = 0;
while(cin >> s)
{
if(mp.find(s) == mp.end())
{
mp.insert(make_pair(s, n++));
}
}
这是为了达到我想要实现还是有更优雅,更STL-ISH解决方案的最佳方式是什么?在此先感谢
答
因为insert
不会更改映射的值,如果密钥已存在,您不需要检查是否有一个元素在该键在插入之前插入。你不需要分开跟踪计数;你可以叫size()
获得下一个值:
while (std::cin >> s)
{
mp.insert(std::make_pair(s, mp.size()));
}
+0
我知道有更好的方法!谢谢!看起来很棒! – 2010-11-05 21:20:29
+1
+1 **爱**使用'size()'! :) – wilhelmtell 2010-11-05 21:50:30
这看起来足够了。 – prolink007 2010-11-05 21:18:46
为什么你需要一个索引?你是否使用这个来将一个单词映射到一个向量中,并在向量中存储更多信息。为什么不把信息存储在地图中? – 2010-11-05 21:24:10
@Martin:最终我将为顶点为这些字符串的图构造一个邻接矩阵。使用索引作为图顶点很方便 – 2010-11-05 21:28:24