我创建了一个映射,其中的键是指向数组索引的指针。然后尝试使用std :: find和传递索引的地址来查找地址。但是我观察到的是它寻找地址的解引用值
这是Iam尝试的示例代码片段
unsigned char arr[8];
std::map<unsigned char*, unsigned char> arrmap;
arrmap.insert({&arr[0], 5});
auto itr = arrmap.find(&add[0]);
因此,当我尝试调试地址时,将按预期插入地址,但std :: find无法搜索它。
如何在地图中搜索我的地址作为密钥?
我认为您的意思是找到类模板std::map
而不是标准算法std::find
的方法。
如果指针指向数组的元素,则可以使用方法find
。
例如
#include <iostream>
#include <map>
int main()
{
unsigned char arr[8] = "1234567";
std::map<unsigned char*, unsigned char> arrmap;
for ( unsigned char &c : arr )
{
arrmap.insert( { &c, c } );
}
auto it = arrmap.find( arr + 2 );
std::cout << static_cast<void *>( it->first ) << ": " << it->second << '\n';
return 0;
}
程序输出可能看起来像
0x7ffd141baf02: 3
如果您指的是标准算法std::find
,那么您应该例如通过以下方式使用标准算法std::find_if
#include <iostream>
#include <map>
#include <iterator>
#include <algorithm>
int main()
{
unsigned char arr[8] = "1234567";
std::map<unsigned char*, unsigned char> arrmap;
for ( unsigned char &c : arr )
{
arrmap.insert( { &c, c } );
}
auto it = std::find_if( std::begin( arrmap ), std::end( arrmap ),
[ptr = arr + 2]( const auto &p )
{
return p.first == ptr;
} );
std::cout << static_cast<void *>( it->first ) << ": " << it->second << '\n';
return 0;
}