-1
我有一個插入值映射的問題。插入映射鍵總是存在
#define SIZE 5
#define pair<unsigned char *, int> pair_t
struct myCmp
{
int operator()(const unsigned char arr_1[SIZE], const unsigned char arr_2[SIZE])
{
printf("arr_1: %02x,%02x,%02x,%02x,%02x arr_2: %02x,%02x,%02x,%02x,%02x",
arr_1[0], arr_1[1],arr_1[2],arr_1[3],arr_1[4],
arr_2[0],arr_2[1],arr_2[2],arr_2[3],arr_2[4]);
}
}
void main()
{
map<unsigned char *, int, myCmp> myMap;
map<unsigned char *, int, myCmp>::iterator it;
unsigned char arr[SIZE] = {'\0'};
//---- first insertion ----//
arr[0] 0xa;
pait_t data_1(arr,1);
pair< map<unsigned char *, int, myCmp>::iterator> ret_1 = myMap.insert(data_1);
if(ret_1.second)
printf("added one");
else
printf("already exist one");
//---- second insertion ----//
arr[1] 0xb;
pait_t data_2(arr,2);
pair< map<unsigned char *, int, myCmp>::iterator> ret_2 = myMap.insert(data_2);
if(ret_2.second)
printf("added two");
else
printf("already exist two");
}
第一插入正常,myCmp
尚未啓動,我得到added one
的問題是與第二齣入,似乎myCmp
得到了相同的兩個數組始終返回0(等於) - 它打印arr_1: ab arr_2: ab
因此ret_2.second
是假(鍵已存在)並打印already exist two
。
我試圖改變ARR的值,但它沒有任何影響。
奇怪的部分是當我試圖做同樣的事情,而不是char *
我用string
(當然改變了所有的簽名..),myCmp
函數有兩個不同的值。
我不能老是用字符串作爲鍵..
我不知道爲什麼它的行爲像這樣和myCmp
得到兩個相同的值。
我很樂意爲此提供指導。
'data_1'和'data_2'都有'arr',因此它們具有相同的值。更糟糕的是,'data_1'在插入地圖後發生變化,因爲'arr'已更改。在將其添加到地圖之前,可以使用'std :: string'或將每個'char *'複製到新的內存中。第一種解決方案更好,更容易。 – nwp