如何在以指针为键的标准映射中使用std :: find [保持]

问题描述 投票:-1回答:1

我创建了一个映射,其中的键是指向数组索引的指针。然后尝试使用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无法搜索它。

如何在地图中搜索我的地址作为密钥?

c++ c++11 stl find stdmap
1个回答
0
投票

我认为您的意思是找到类模板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;
}
© www.soinside.com 2019 - 2024. All rights reserved.