Возможный дубликат:
В STL-картах лучше использовать map:: insert, чем []?
Мне было интересно, когда я вставляю элемент в карту, каков рекомендуемый способ. Должен ли я
map[key] = value;
или
map.insert(std::pair<key_type, value_type>(key, value));
Я сделал следующий быстрый тест:
#include <map>
#include <string>
#include <iostream>
class Food {
public:
Food(const std::string& name) : name(name) { std::cout << "constructor with string parameter" << std::endl; }
Food(const Food& f) : name(f.name) { std::cout << "copy" << std::endl; }
Food& operator=(const Food& f) { name = f.name; std::cout << "=" << std::endl; return *this; }
Food() { std::cout << "default" << std::endl; }
std::string name;
};
int main() {
std::map<std::string, Food> m0;
/*
1) constructor with string parameter
2) copy
3) copy
4) copy
*/
m0.insert(std::pair<std::string, Food>("Key", Food("Ice Cream")));
/*
1) constructor with string parameter
2) default
3) copy
4) copy
5) =
*/
// If we do not provide default constructor.
// C2512: 'Food::Food' : no appropriate default constructor available
m0["Key"] = Food("Ice Cream");
}
- Я понимаю, используя функцию-член
insert
, будет задействован вызов меньшей функции. Таким образом, используетсяinsert
рекомендуемый способ? - Почему нужен конструктор по умолчанию, когда используется способ
map[key] = value
?
Я знаю, что insert
не перезаписывает пару значений существования, но map[key] = value
делает. Однако, это единственный фактор, который я принимаю во внимание, когда пытаюсь выбрать из обоих?
Как насчет
- Производительность
- Доступность конструктора значений по умолчанию
- ???