gpt4 book ai didi

c++ - 从指针访问 map 的索引

转载 作者:行者123 更新时间:2023-12-04 01:04:56 26 4
gpt4 key购买 nike

我目前有这个

struct test
{
std::map<int, UINT64> ratio;
}
哪里 pContext是一个指向测试的指针
int group = 1;
auto a = (*pContext).ratio[group]; <---Error
在上面我得到以下错误
Severity    Code    Description Project File    Line    Suppression State
Error C2678 binary '[': no operator found which takes a left-hand operand of type 'const std::map<int,UINT64,std::less<int>,std::allocator<std::pair<const int,UINT64>>>' (or there is no acceptable conversion)
关于如何解决这个问题的任何建议?

最佳答案

你似乎遗漏了重要的细节,但幸运的是错误信息足以填补这些。你的指针不仅仅是“一个指针”,它显然是一个常量指针。
这是一个问题的原因在于 operator[]在 map 作品。该函数是非常量的(因此不能在 const 对象上调用)。它是非常量的原因是因为它可以修改映射:如果找不到键,它将添加具有默认构造值的键并返回对该值的引用。
要在 const 映射中查找值,您应该使用 find :

auto it = pContext->ratio.find(group);
if (it != pContext->ratio.end()) {
std::cout << "Key=" << it->first << " Value=" << it->second << "\n";
}
实际上,除非您明确想要添加缺失值或者您确定您的值在 map 中,否则您应该更喜欢使用它来查找任何 map 上的值。
当然,为了避免一直手动编写这些肮脏的东西,只需将其包装到结构或类似结构上的成员函数中即可。

关于c++ - 从指针访问 map 的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66847735/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com