gpt4 book ai didi

C++ - 包含 3 个元素的列表的类

转载 作者:太空宇宙 更新时间:2023-11-04 14:29:53 25 4
gpt4 key购买 nike

我正在尝试创建一个基本上是关联数组/映射的数据类型,但它有 3 个元素而不是 2 个。它会像这样实现:

myTable rouletteBoard;
rouletteBoard.push.back(0, "Green", "Neither");
rouletteBoard.push.back(00, "Green", "Neither");
rouletteBoard.push.back(1, "Red", "Odd");

所以实际上只是一个包含 3 个元素的映射或列表,第一个元素是唯一键。

是的,这是一款轮盘游戏。而且我了解如何基本上为每个数字创建一个类,并为每个数字创建一个具有适当属性的单独实例,但我觉得这样效率很低,因为我可以只列出每个数字及其相关属性。

我在为此创建类方面几乎一无所获。我一直想知道是否有更好的方法来做到这一点并尝试,然后感到沮丧并放弃。

最佳答案

首先让我们谈谈数据。请注意,0 必须与 00 区分开来,因此我们不能天真地将它们都存储为整数。其次,请注意颜色和奇偶校验(奇数/偶数)可以立即从数字中导出。无需将它们存储为单独的数据。所以我们可以这样做:

struct Pocket {
enum class Color { GREEN, RED, BLACK };
enum class Parity { NONE, ODD, EVEN };

Pocket(int8_t num) : number(num) {}

int8_t number; // -1 for "00" on American style wheel

Parity parity() const {
if (number < 1) return Parity::NONE;
if (number % 2) return Parity::ODD;
return Parity::EVEN;
}

Color color() const {
if (number < 1) return Color::GREEN;
if (number % 2) return Color::RED;
return Color::BLACK;
}
};

然后你可以制作一个简单的容器:

std::vector<Pocket> wheel;
for (int8_t ii = is_american ? -1 : 0; ii <= 36; ++ii) {
wheel.emplace_back(ii);
}

最后,您可以添加用于打印的代码:

std::ostream& operator <<(std::ostream& out, Pocket pocket) {
if (pocket.number == -1) return out << "00";
return out << pocket.number;
}

const char* to_string(Pocket::Color color) {
switch (color) {
case Pocket::Color::GREEN: return "Green";
case Pocket::Color::RED: return "Red";
case Pocket::Color::BLACK: return "Black";
default: return "?";
}
}

关于C++ - 包含 3 个元素的列表的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43023816/

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