簡體   English   中英

插入map- key始終存在

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM