我在将值插入地图时遇到了问题。
#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");
}
第一次插入是o.k,myCmp
尚未激活,我得到added one
问题在于第二次插入,似乎myCmp
得到相同的两个数组并且总是返回0(相等) - 它打印arr_1: ab arr_2: ab
因此ret_2.second
为false(密钥已存在)并打印already exist two
。
我试图更改arr的值,但它没有任何影响。
奇怪的部分是当我尝试做同样的事情而不是char *
我使用string
(当然改变了所有的签名......),myCmp
函数得到了两个不同的价值观。
我不能使用字符串作为密钥..
我不知道为什么它会像这样,myCmp
会得到两个相同的值。
我很乐意就此事提供指导。
答案 0 :(得分:0)
你给的arr地址在两种情况下都是一样的。尝试使用std::string
。