關於使用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到...