![](/img/trans.png)
[英]What is the difference between unordered_map::emplace and unordered_map::insert in C++?
[英]Emplace and insert in unordered_map in Visual Studio?
我正在努力使用VS2010在c ++中使用unordered_map做最基本的事情:插入一些東西。
unordered_map<string, string> cats;
//cats.insert("Adam", "Streak");
//cats.emplace("Kyra", "Shadow");
我確定我犯了一個非常簡單的錯誤,但我現在花了兩個小時試圖弄清楚它是否有用。 上述兩條注釋行在取消注釋時都會出錯。
當cats.insert("Adam", "Streak");
沒有注釋,錯誤是:
錯誤1錯誤C2678:二進制'==':找不到運算符,它接受類型'const std :: string'的左手操作數(或者沒有可接受的轉換)c:\\ program files(x86)\\ microsoft visual studio 10.0 \\ VC \\包括\\ xfunctional
當cats.emplace("Kyra", "Shadow");
沒有注釋,錯誤是:
錯誤1錯誤C2780:'std :: pair <_Ty1,_Ty2> std :: _ Hash <_Traits> :: emplace(_Valty &&)':需要1個參數 - 提供2個
我很困惑,因為互聯網上有幾個使用這種確切語法的例子。 例如,cplusplus.com 在這里 。
我究竟做錯了什么?
兩個函數都接受std::pair<A,B>
make_pair
是最簡單的成對方式。
cats.insert(std::make_pair("Adam", "Streak"));
cats.emplace(std::make_pair("Kyra", "Shadow"));
要么
cats.insert(std::pair<std::string, std::string>("Adam", "Streak"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.