C++常量混淆

标签 c++ dictionary key constants

第 29 行在编译时令人窒息:

void
CI_Metadata::get_record_metadata(const char* block, RecordInfoVector* record_info_vector) {
    *record_info_vector = this->records.at(block); // <== LINE 29
    return;
}

错误是:

CI_Metadata.cpp: In member function ‘void CI_Metadata::get_record_metadata(const char*, RecordInfoVector*)’:
CI_Metadata.cpp:29: error: invalid conversion from ‘const char*’ to ‘char*’
CI_Metadata.cpp:29: error:   initializing argument 1 of ‘_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::at(const _Key&) [with _Key = char*, _Tp = std::vector<std::pair<char*, bool>, std::allocator<std::pair<char*, bool> > >, _Compare = std::less<char*>, _Alloc = std::allocator<std::pair<char* const, std::vector<std::pair<char*, bool>, std::allocator<std::pair<char*, bool> > > > >]’

我假设这意味着 at() 不会采用 const char *。那么,如何访问存储在 this->records.at(block) 中的 vector ,其中 block 是一个 const char*

最佳答案

我认为解决此问题和许多其他潜在问题的最简单方法是图灵 std::map<char*, ...>进入std::map<std::string, ...> .

或者,定义一个合适的比较器:Using char* as a key in std::map

关于C++常量混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17759413/

相关文章:

带有 CSV 元组列表的 python 字典

java - 我的哈希码不起作用 - 是我的 equals() 有问题吗?

perl - 在 Perl 中,如何按值的频率排序?

php - 我可以使用 SET 选项将 ON DUPLICATE KEY UPDATE 与 INSERT 查询一起使用吗?

c++ - 跨平台mySQL与字符集不一致

c++ - 对智能指针范围的困惑

用于处理网格上的分布式矩阵的 C++ 库

C++ 将无符号转换为有符号

python - 访问嵌套字典中的值

Ruby - 将两个散列与一些类似的键合并