vector排序,set交並,map

2021-09-06 06:05:24 字數 2063 閱讀 9748

1 #include 2 #include 3 #include 4

using

namespace

std;56

bool cmp(const pair &a,const pair &b)710

11int

main()

1223

int _size =a.size();

24//

sort(&a[0],&a[_size],cmp);

//第乙個不是&a

25 sort(a.begin(),a.end(),cmp);//

上寫兩個均可排序

判斷存在與否,過去一直用的是count方法。

map插入資料,以上三種用法,雖然都可以實現資料的插入,但是它們是有區別的,當然了第一種和第二種在效果上是完成一樣的,用insert函式插入資料,在資料的插入上涉及到集合的唯一性這個概念,即當map中有這個關鍵字時,insert操作是插入資料不了的,但是用陣列方式就不同了,它可以覆蓋以前該關鍵字對應的值

注意:下面是在2012成都預選賽時想起的問題

map mm;

map ::iterator ptr;

怎樣讓迭代器指向第三個元素

ptr = mm.begin()+2,這樣會編譯錯誤,分兩次自增又太麻煩。

還有就是怎樣直接返回第三個位置的元素

對於第乙個問題,可以advance(ptr,2)

第二個問題實際上是隨機訪問的問題, map不可以的,還是 advance(ptr,2),輸出*ptr

在涉及到容器和演算法的操作中,還有兩個迭代器函式非常有用:

· advance() 按指定的數目增減迭代器。

· distance() 返回到達乙個迭代器所需(遞增)操作的數目。

例如:

list ilist;

list::iterator p =

find(ilist.begin(), ilist.end(), 2);

cout << "before: p == " << *p << endl;

advance(p, 2); // same as p = p + 2;

cout << "after : p == " << *p << endl;

int k = 0;

distance(p, ilist.end(), k);

cout << "k == " << k << endl;

advance()函式接受兩個引數。第二個引數是向前推進的數目。對於前推迭代器,該值必

須為正,而對於雙向迭代器和隨機訪問迭代器,該值可以為負。

使用 distance()函式來返回到達另乙個迭代器所需要的步驟。

注意 distance()函式是迭代的,也就是說,它遞增第三個引數。因此,你必須初始化該引數

。未初始化該引數幾乎注定要失敗。

vector排序問題

要對vector中的自定義型別進行排序,首先需要提供乙個函式bool comp const interval a,const interval b 來定義型別的排序準則 然後呼叫std sort intervals.begin intervals.end comp 寫了幾個小的測試用例也都通過了,但...

Set排序方法

在講解set集合排序的幾種方法之前,我們應該先清楚set集合的幾種型別以及特點,才能有效使用起來。set集合的特點 set不允許包含相同的元素,如果試圖把兩個相同元素加入同乙個集合中,add方法返回false。set判斷兩個物件相同不是使用 運算子,而是根據equals方法。也就是說,只要兩個物件用...

vector與set區別 基礎知識

首先,vector是序列式容器而set是關聯式容器。set包含0個或多個不重複不排序的元素。也就是說set能夠保證它裡面所有的元素都是不重複的。另外對set容器進行插入時可以指定插入位置或者不指定插入位置。如insert v.begin 1 也可以直接用insert 1 還有一點是 set對一些操作...