`auto-increment` std :: map:) - PullRequest
       8

`auto-increment` std :: map:)

1 голос
/ 06 ноября 2010

Хорошо, проблема довольно проста - я читаю слова из входного потока, слова могут повторяться. Мне нужно заполнить карту, чтобы все слова получили индексы от 0 до n-1. Вот мой код:

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-иш решения? Заранее спасибо

1 Ответ

7 голосов
/ 06 ноября 2010

Вам не нужно проверять, есть ли элемент в этом ключе, прежде чем вставлять, потому что insert не изменяет сопоставленное значение, если ключ уже существует.Вам не нужно отслеживать счет отдельно;Вы можете просто позвонить size(), чтобы получить следующее значение:

while (std::cin >> s)
{
    mp.insert(std::make_pair(s, mp.size()));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...