STL <map> позволяет дублировать пары?
Я написал следующий код и был удивлен выходом. Я слышал, что <map>
избегает столкновения ключей, но здесь он, похоже, позволяет вставлять повторяющиеся пары.
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<string,char> namemap;
namemap["yogi"]='c';
namemap.insert(pair<string,char>("yogendra",'a'));
namemap.insert(pair<string,char>("yogendra",'b'));
cout<<namemap["yogendra"]<<endl;
return 0;
}
Этот код выводит a
. Вы можете запустить его на С++ Shell.
Не удается ли избежать столкновения, что мы не можем вводить несколько пар с одним и тем же ключом?
Ответы
Ответ 1
Второй insert
с тем же ключом является no-op. Он просто возвращает итератор, указывающий на существующий элемент.
std::map::insert()
имеет возвращаемое значение, которое вы должны проверить.
Он имеет тип std::pair<iterator,bool>
. Второй элемент пары сообщает вам, был ли вставлен элемент, или уже существовала запись с тем же ключом.
cout << namemap.insert(pair<string,char>("yogendra",'a')).second << endl;
cout << namemap.insert(pair<string,char>("yogendra",'b')).second << endl;
Ответ 2
Карта Stl не позволяет использовать одни и те же ключи. Возможно, вам захочется пойти на мульти-карту.!