[英]insertion to map- key is always exist
我在插入要映射的值時遇到問題。
#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
為false(鍵已經存在)並且打印already exist two
。
我試圖更改arr的值,但是它沒有任何影響。
奇怪的是,當我嘗試執行相同的操作但不使用char *
我使用了string
(當然更改了所有簽名。), myCmp
函數得到了兩個不同的值。
我不能使用字符串作為鍵。
我不知道為什么它會這樣,並且myCmp
獲得兩個相同的值。
我很樂意為您提供指導。
您提供的arr地址在兩種情況下都相同。 嘗試使用std::string
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.