映射键的插入始终存在

insertion to map- key is always exist

本文关键字:存在 插入 映射      更新时间:2023-10-16

我在插入要映射的值时遇到问题。

#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] = {''};
  //---- 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");
}

第一次插入是ok,myCmp还没有激活,我得到了added one

问题是第二次插入,似乎myCmp得到了相同的两个数组,并且总是返回0(相等)-它打印arr_1: ab arr_2: ab所以CCD_ 5为假(密钥已经存在)并且打印CCD_。

我试图更改arr的值,但它没有任何影响。

奇怪的是,当我尝试做同样的事情,但我使用的不是char *,而是string(当然更改了所有签名…)时,myCmp函数得到了两个不同的值。

我不能用字符串作为关键字。。

我不知道为什么它会这样,myCmp会得到两个相同的值。

我很乐意在这件事上得到指导。

您给出的arr地址在两种情况下都是相同的。尝试使用std::string