Set容器使用指標的一些問題

2021-08-03 23:13:11 字數 1652 閱讀 2193

關於使用set容器存放物件指標的一些問題:

1,當使用set容器存放物件指標時,不指定set第二個引數的情況下,預設是以指標的值得大小進行排序的

2,當需要以指定的方法進行排序的時候需要指定set的第二個引數,使用乙個仿函式進行繫結判斷條件(過載物件的小於號操作符並不能使set排序,因為存放的是指標,並不是物件本身,物件本身的時候小於號操作符是有效的)

仿函式的定義有兩種方式:

第一種在物件內部定義仿函式

#include 

#include

#define bmts_seq_is_less(seq1,seq2)\

((unsigned

short)((unsigned

short)(seq1) - (unsigned

short)(seq2))> (unsigned

short)(1

<<15))

class protocoloperat

int getdataseq()

void*p;

};struct node

};void* mpdata;

};typedef

std::set

testset;

using

namespace

std;

int main()

ret = intset.insert(p1);

if(ret.second == false)

ret = intset.insert(p3);

if(ret.second == false)

getchar();

return

0;}

第二種在物件外部定義仿函式,此方法的時候需對函式指標用typedef進行一次重定義(在vs2010上不進行重定義編譯無法通過)

#include 

#include

#define bmts_seq_is_less(seq1,seq2)\

((unsigned

short)((unsigned

short)(seq1) - (unsigned

short)(seq2))> (unsigned

short)(1

<<15))

class protocoloperat

int getdataseq()

void*p;

};struct node;

typedef node* nodeptr;

struct nodesortcriterion

};typedef

std::set

testset;

using

namespace

std;

int main()

ret = intset.insert(p1);

if(ret.second == false)

ret = intset.insert(p3);

if(ret.second == false)

getchar();

return

0;}

定義完以後set容器就會按照仿函式定義的方法進行插入操作,當兩個物件的值一致的時候插入失敗而返回錯誤

set容器的一些用法

set集合容器 實現了紅黑樹的平衡二叉檢索樹的資料結構,插入元素時,它會自動調整二叉樹的排列,把元素放到適當的位置,以保證每個子樹根節點鍵值大於左子樹所有節點的鍵值,小於右子樹所有節點的鍵值 另外,還得保證根節點左子樹的高度與右子樹高度相等。平衡二叉檢索樹使用中序遍歷演算法,檢索效率高於vector...

關於指標定義的一些問題

關於const在定義常量方面的使用問題 在學習的c c 的過程中,會時常會碰到一些令人大費腦筋拐不過彎來的事情 比如這個const的使用。當我看到和int const a,const int a,const int const a const int a,int const a的 時候,頭都大了,一...

C 指標的一些問題Mark

翻了下以前的blog,兩年以前的了。當時還說每天練一點,慢慢熟悉,簡直 雙重指標 p 假如我有乙個m n維的陣列array,想要對應到指標p q r上去 int array m n int p n int q int r m r m 好理解,r是乙個m元的陣列,每個元素是乙個指標。指標 p和陣列p到...