1. 程式人生 > >vector和map 容器的區別

vector和map 容器的區別

1)vector為順序容器,erase迭代器不僅使所有指向被刪元素的迭代器失效,而且使被刪元素之後的所有迭代器失效,所以不能使用erase(iter++)的方
式,但是erase的返回值為下一個有效的迭代器:可以這樣使用:

  for( iter = c.begin(); iter != c.end(); )

            iter = c.erase(iter);

2)erase迭代器只是被刪元素的迭代器失效:所以可以這樣使用:

   for( iter = c.begin(); iter != c.end(); )  

                c.erase(iter++);

 

正因為:map erase 會使被刪元素的迭代器失效:所以在使用map iterator時候要注意:

 

一種很常見的錯誤是:

for ( map<int, string>::iterator it = str_map.begin(); it!=str_map.end(); it++ ) {

 

if ( some_condition )

 str_map.erase(it);

}

刪除操作會使it亂掉,再使用it++就出錯了。正確的做法是:

for ( map<int, string>::iterator it = str_map.begin(); it!=str_map.end();  ) {

 if ( some_condition ) {

 str_map.erase(it++);

 } else {

 it++;

 }

}

 

3)Map可以通過key查詢元素,而vector查詢元素也類似,通過值查詢;

 

4)對於vector的值得注意的地方,可以對vector呼叫排序演算法,舉例如下:

typedef struct {

         std::string strName;

         int  money;

        }company_person;

 

然後可以按照strName進行排序;我在一個專案中用到過這個,在一個專案中,客戶端以隨機的傳送strName,然後在服務端對他們進行重新排序;

 

5)map和vector 插入元素的方式不一樣,map沒有push_back這樣的函式,只有insert依次插入元素,或者直接通過建構函式初始化;

 轉轉::http://blog.csdn.net/smilestone_322/article/details/7976764