использование функции .find () на карте, когда ключ является парным переполнением стека

Я использую пару строк в качестве ключа на моей карте и int в качестве значения. Я хочу выполнить поиск по карте, и если точная пара уже существует, увеличьте значение, иначе вставьте пару в карту (со значением 1). Он компилирует, однако, на самом деле он не находит пары, которые уже существуют, он только вставляет. (вывод только для целей тестирования). Я думаю, что проблема с использованием .find () с парой, но не уверен, как это исправить …

1

Решение

Код, который вы показали, кажется правильным. Можете ли вы продемонстрировать с полным примером, включая main?

Кроме того, я думаю, что вы могли бы сойти с рук operator[]:

++pairs[std::make_pair(*slow, *fast)];

Однако реальная проблема, вероятно, в том, что вы ожидаете pairs быть параметром «out», пока вы передаете его по значению. Ваша функция эффективно только изменяет копию контейнера. Вы хотите взять это по ссылке вместо этого. map<pair<string, string>, int> findPairs(map<pair<std::string,std::string>, int>& pairs, multiset<string> artists){ (Обратите внимание & перед pairs параметр).

1

Другие решения

В почтовом индексе нет ничего плохого

Тем не менее, вы делаете слишком много, чем требуется. Например, этот код

yo=pairs.find(p);
if (yo==pairs.end())
{
pairs.insert(make_pair(p,1));
cout<<"inserted"<<endl;
}
else
{
yo->second+=1;
cout<<"entered"<<endl;
}

в точности эквивалентно этому:

pairs.insert(make_pair(p,1)).first->second += 1;

что в точности эквивалентно этому:

++pairs[p];

что означает, что весь код может быть заменен просто ++pairs[p]или просто так:

++pairs[make_pair(*slow, *fast)];

так как p является make_pair(*slow, *fast), в конце концов.

0

По вопросам рекламы [email protected]