我在混合C/C++環境中編碼。我在C部分有一個結構,我想在C++部分的地圖容器中收集它。 我想我應該定義一個自定義的key_compare函數對象,並讓STL map :: insert()命令節點。不過我不知道如何修改map容器來自定義map :: find()函數。我正在尋找一種方法來自定義map :: find()函數來執行更多的key_compare函數進行等價檢查。在ANSI C中定義的結構的STL映射C
請你讓我知道如何將這些函數放入STL :: map或STL :: set?
這裏是我的C部分,結構(用gcc編譯):
typedef struct iotrace_arh_node
{
double time;
unsigned long long int blkno;
int bcount;
u_int flags;
int devno;
unsigned long stack_no;
} iotrace_arh_node_t;
這裏是我的建議key_compare和C++部分等效性檢查功能find()方法(編譯使用g ++) :
int key_compare (struct iotrace_arh_node tempa, struct iotrace_arh_node tempb)
{
return (tempa.blkno-tempb.blkno);
}
int key_equal(struct iotrace_arh_node tempa, struct iotrace_arh_node tempb)
{
if((tempa.blkno == tempb.blkno) && (tempa.bcount == tempb.bcount))
return 0; // tempa and tempb is equal, node fund in the map
else if ((tempb.blkno < tempa.blkno) )
return -1; //tempb is less than tempa
else if ((tempb.blkno >= tempa.blkno) && (tempb.blkno + tempb.bcount < tempa.blkno + tempa.bcount))
return 0; // tempa and tempb is equal, node fund in the map
else
return 1; //tempb is grater than tempa
}
[STL映射和集合中的排序順序](http://stackoverflow.com/questions/3370185/sort-order-in-stl-map-and-set) – Joe 2011-04-20 04:47:09