Я пишу код в смешанной среде C / C ++.У меня есть структура в части C, и я хотел бы собрать ее в контейнер карты в части C ++.Я думаю, что я должен определить пользовательский key_compare функциональный объект и позволить STL map :: insert () упорядочивать узлы.Однако я не знаю, как я могу изменить контейнер карты для настройки функции map :: find () .Я ищу способ настроить функцию map :: find () , чтобы сделать нечто большее, чем функция key_compare для проверки эквивалентности.
Пожалуйста, дайте мне знать, как я могу поместить эти функции в 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 и функция проверки эквивалентности для find () в части C ++ (скомпилировать с 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
}