Map的insert和 操作符的區別

2021-06-18 23:59:18 字數 1108 閱讀 7011

給map新增新的元素時,我們可以通過insert函式和操作符來處理,其實他們兩種方法的的內部原理都是一樣的,都是呼叫紅黑二叉樹insert_unique()函式來完成的,但是遇到相同的鍵值時,還是需要額外注意!

看下面的**:

using namespace std;

int _tmain(int argc, _tchar* argv)

{maptestmap;

//step1

testmap.insert(make_pair(1 , "hello"));

testmap.insert(make_pair(2 , "world"));

map::iterator iter = testmap.begin();

for(; iter != testmap.end(); ++iter)

printf(" %s" , iter->second.c_str());//輸出hello world

//step2

testmap[1] = "china";

iter = testmap.begin();

for(; iter != testmap.end(); ++iter)

printf(" %s" , iter->second.c_str());//輸出hello china

//step3

testmap.insert(make_pair(1 , "shanghai"));

iter = testmap.begin();

for(; iter != testmap.end(); ++iter)

printf("%s \n" , iter->second.c_str()); // 輸出hello shanghai

return 0;

區別在於step3 和step4 , 其中的原因的是insert在map中存在鍵值時,什麼也不做!而 【】操作符雖然也是map中存在鍵值時,什麼也不做,但是他會利用insert的返回值pair::iterator , bool> 的指標,對對應鍵值的實值的引用進行賦值。

其中還有一點需要注意:【】操作符會多呼叫一次實值物件的建構函式產生乙個預設物件,而真正的產生作用的是對預設物件的賦值,所以務必保證你的實質物件的賦值是安全的!

MySQL的and操作符和or操作符

有時對where的要篩選的列不止乙個時,那麼就用到了and操作符和or操作符,and操作符顧名思義的意思是 並且 而or操作符的意思是 或者 比如以部門員工表為例 查詢部門編號為d001並且入職日期為 1985 02 02的員工編號,那麼就要用到and操作符 那如果是查詢部門編號為d001或者入職日...

ruby中的 操作符和 操作符

url str foo foo str bar foobar str foo foo str.object id 606274188 str bar foobar str.object id 606283808 str foobar foobarfoobar str.object id 606283...

map的insert和 的區別

遇到一些bug,檢查 似乎沒有問題,執行,出錯。仔細檢查,發現針對map變數,插入時候使用了find與insert。但是之前有個查詢函式中卻直接呼叫過載符去判斷second變數是否為空。針對map而言,insert和還是有一些差別。使用find查詢,未找到返回空迭代器。使用,則一定給程式返回乙個結果...