映射键的插入始终存在
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] = {' '};
//---- 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
。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- C++模板来检查友元函数的存在
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 预处理器:插入结构名称中的前一个行号
- 既然存在危险,为什么项目要使用-I include开关
- 我们可以访问一个不存在的联盟的成员吗
- 在未初始化映射的情况下,将值插入到映射的映射中
- 如何在c++中只将键插入到bimap的一侧
- C++:对不存在的命名空间使用命名空间指令
- 如果存在 QSQLITE 数据库,则根据 qt 中的行值插入或更新
- 如果存在哈希,请加快C unordered_map插入
- 有效地测试 QSet 是否包含元素,如果不存在,则插入
- Bool排序的插入函数,检查列表中是否已经存在int
- C 将HEAP对象插入std ::用insert()插入映射,而另一个则存在删除新的对象
- 插入时对对象进行排序(若存在,则添加数据)
- 如何检查对象属性更新是否存在 std::map 键,否则插入一个新键?
- 如果键已经存在,为什么 stl map 会插入另一个值,而不仅仅是更改它
- 映射键的插入始终存在
- 如何根据插入对的存在来实现不同的“std::map insert()”行为
- 如果存在插入/删除/重新散列操作,则unordered_map复制/释放包含的对象