2010-11-05 76 views
1

好吧,问题很简单 - 我正在读取输入流中的单词,这些单词可能会重复。我需要填充一张地图,以便所有单词的索引从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解决方案的最佳方式是什么?在此先感谢

+0

这看起来足够了。 – prolink007 2010-11-05 21:18:46

+0

为什么你需要一个索引?你是否使用这个来将一个单词映射到一个向量中,并在向量中存储更多信息。为什么不把信息存储在地图中? – 2010-11-05 21:24:10

+0

@Martin:最终我将为顶点为这些字符串的图构造一个邻接矩阵。使用索引作为图顶点很方便 – 2010-11-05 21:28:24

回答

7

因为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