首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于Python字典的C++

相当于Python字典的C++
EN

Stack Overflow用户
提问于 2014-12-28 05:52:52
回答 5查看 54.9K关注 0票数 26

我目前正在使用AI编写toe程序,我在翻译这一行代码(python)时遇到了一些困难:

代码语言:javascript
复制
RANKS = dict([(4,3),                       # center  = 3
              (0,2),(2,2),(6,2),(8,2),     # corners = 2
              (1,1),(3,1),(5,1),(7,1)])    # sides   = 1

进入C++

有什么建议吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-12-28 05:59:52

C++中最接近的匹配将是一个std::unordered_map。这是一个哈希表,将int键映射到int值。

代码语言:javascript
复制
#include <unordered_map>


std::unordered_map<int, int> RANKS = {
        { 4, 3 },
        { 0, 2 }, { 2, 2 }, { 6, 2 }, { 8, 2 },
        { 1, 1 }, { 3, 1 }, { 5, 1 }, { 7, 1 }
};

例如,可以使用operator[]访问元素

代码语言:javascript
复制
std::cout << RANKS[0] << std::endl; // prints "2"

注意,C++标准库还有std::map类模板,它允许您创建一个类似但有序的查找表std::map<int, int>,具有对数查找和插入复杂性。但是python dict是哈希表,因此unordered_map在行为上更接近于匹配。

票数 42
EN

Stack Overflow用户

发布于 2014-12-28 06:10:27

您可以为此使用一个映射或unordered_map (它们会工作得很好),但考虑到您的键是一组密集的整数(即从0到N的所有整数),有更好的选择。

我可能会用std::array代替。看起来会是这样的:

代码语言:javascript
复制
std::array <char, 9> vals = { 2, 1, 2, 1, 3, 1, 2, 1, 2 };

这提供了几乎相同的语法和可观察的行为,但通常也会节省相当多的内存,可能还会节省CPU时间。

票数 4
EN

Stack Overflow用户

发布于 2014-12-28 05:57:24

在C++中,这将是一个std::unordered_map

代码语言:javascript
复制
#include <unordered_map>

std::unordered_map<int, int> dict
{
    {
        { 4, 3 },
        { 0, 2 }, { 2, 2 }, { 6, 2 }, { 8, 2 },
        { 1, 1 }, { 3, 1 }, { 5, 1 }, { 7, 1 }
    }
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27674009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档