我需要向用户显示以下座位并能够预订和取消预订。
std::map<std::string, int> seats{ {"1A", 0}, {"1B", 0}, {"1C", 0}, {"1D", 0},{"1E", 0},
{"2A", 0}, {"2B", 0}, {"2C", 0}, {"2D", 0},{"2E", 0},
{"3A", 0}, {"3B", 0}, {"3C", 0}, {"3D", 0},{"3E", 0},
{"4A", 0}, {"44", 0}, {"4C", 0}, {"4D", 0},{"4E", 0},
{"5A", 0}, {"5B", 0}, {"5C", 0}, {"5D", 0},{"5E", 0},
{"6A", 0}, {"6B", 0}, {"6C", 0}, {"6D", 0},{"6E", 0},
{"7A", 0}, {"7B", 0}, {"7C", 0}, {"7D", 0},{"7E", 0},
{"8A", 0}, {"8B", 0}, {"8C", 0}, {"8D", 0},{"8E", 0},
{"9A", 0}, {"9B", 0}, {"9C", 0}, {"9D", 0},{"9E", 0},
{"10 A", 0}, {"10B", 0}, {"10C", 0}, {"10D", 0},{"10E", 0},
{"11 A", 0}, {"11B", 0}};
我也尝试了unordered_map,但无论我做什么,我都无法使map以我想要的方式显示座位(1A,1B,1C,1D,1E)。
1A 1B 1C 1D 1E
2A 2B 2C 2D 2E...
尝试将座位名称更改为A1 B1 C1 D1...显然,我是C++新手。我知道地图是有序的,并且我知道使用unordered_map无法保证地图的显示方式。
我的问题是,我可以使用地图在一个特定的方式,所以我可以显示它的方式,我想要。或者,在C++中是否有另一种数据结构可以用于我的任务。
阵列是我的第一选择,然而,我发现很难跟踪哪个座位出售和处理取消。现在我可以使用两个数组,一个数组用于字符串表示,一个数组用于处理保留和取消操作。
谁能给我一个解决这个问题的建议吗?
您可以放入一个自定义比较器来按照您想要的顺序对映射中的数据进行排序。
对此,您可以参考以下代码:
auto seatCompare = [](std::string const& seat1, std::string const& seat2) -> bool {
std::smatch result1;
std::smatch result2;
std::regex pattern(R"(([0-9]+)([a-z A-Z]+))");
if (!regex_match(seat1, result1, pattern) || !regex_match(seat2, result2, pattern)) {
throw std::runtime_error("Seat name invalid!");
}
if (std::stoi(result1[1]) == std::stoi(result2[1])) {
return result1[2] < result2[2];
}
return std::stoi(result1[1]) < std::stoi(result2[1]);
};
std::map<std::string, int, decltype(seatCompare)> seats(seatCompare);
seats = { {"1A", 0}, {"1B", 0}, {"1C", 0}, {"1D", 0},{"1E", 0},
{"2A", 0}, {"2B", 0}, {"2C", 0}, {"2D", 0},{"2E", 0},
{"3A", 0}, {"3B", 0}, {"3C", 0}, {"3D", 0},{"3E", 0},
{"4A", 0}, {"4B", 0}, {"4C", 0}, {"4D", 0},{"4E", 0},
{"5A", 0}, {"5B", 0}, {"5C", 0}, {"5D", 0},{"5E", 0},
{"6A", 0}, {"6B", 0}, {"6C", 0}, {"6D", 0},{"6E", 0},
{"7A", 0}, {"7B", 0}, {"7C", 0}, {"7D", 0},{"7E", 0},
{"8A", 0}, {"8B", 0}, {"8C", 0}, {"8D", 0},{"8E", 0},
{"9A", 0}, {"9B", 0}, {"9C", 0}, {"9D", 0},{"9E", 0},
{"10A", 0}, {"10B", 0}, {"10C", 0}, {"10D", 0},{"10E", 0},
{"11A", 0}, {"11B", 0}};
或C++98样式
struct SeatCompare {
bool operator()(std::string const& seat1, std::string const& seat2)
{
std::smatch result1;
std::smatch result2;
std::regex pattern(R"(([0-9]+)([a-z A-Z]+))");
if (!regex_match(seat1, result1, pattern) || !regex_match(seat2, result2, pattern)) {
throw std::runtime_error("Seat name invalid!");
}
if (std::stoi(result1[1]) == std::stoi(result2[1])) {
return result1[2] < result2[2];
}
return std::stoi(result1[1]) < std::stoi(result2[1]);
}
};
std::map<std::string, int, SeatCompare> seats{
{"1A", 0}, {"1B", 0}, {"1C", 0}, {"1D", 0},{"1E", 0},
{"2A", 0}, {"2B", 0}, {"2C", 0}, {"2D", 0},{"2E", 0},
{"3A", 0}, {"3B", 0}, {"3C", 0}, {"3D", 0},{"3E", 0},
{"4A", 0}, {"4B", 0}, {"4C", 0}, {"4D", 0},{"4E", 0},
{"5A", 0}, {"5B", 0}, {"5C", 0}, {"5D", 0},{"5E", 0},
{"6A", 0}, {"6B", 0}, {"6C", 0}, {"6D", 0},{"6E", 0},
{"7A", 0}, {"7B", 0}, {"7C", 0}, {"7D", 0},{"7E", 0},
{"8A", 0}, {"8B", 0}, {"8C", 0}, {"8D", 0},{"8E", 0},
{"9A", 0}, {"9B", 0}, {"9C", 0}, {"9D", 0},{"9E", 0},
{"10A", 0}, {"10B", 0}, {"10C", 0}, {"10D", 0},{"10E", 0},
{"11A", 0}, {"11B", 0}};
我们可以使用这些jvm标志来确定编译阈值,但是有没有一种方法可以在运行时以编程方式确定它?
在Borland VCL库中,几乎所有控件都有提示属性。在运行时,当您将鼠标放在相应的控件上时,当您移动鼠标时,一个带有提示文本的小框会弹出并再次消失,例如Windows资源管理器和其他程序中的帮助消息,当鼠标光标放在按钮上时。 JavaFX中是否有类似的概念(实际上,我使用的是ScalaFX)? 当然,我可以创建一个没有装饰的新舞台,添加一些鼠标监听器等,但是它不是已经在某个地方可用了吗?
我很想知道是否有一个等价物: 它生成与matplotlib图表相反的图形。
我又在和生命搏斗了。或者事实上,我赢得了这场战斗,但我不确定结果是否是预期的处理方式。 假设我有一个有两个生存期的结构:
问题内容: 我想让我的多锁位于不同的Redis实例上。 我发现redission可以指定要在其上执行命令的实例,但是如果命令与键相关,则指定的实例会将命令传输到另一个实例。 你能给我一些建议吗? 问题答案: 您可以,但并非不重要。首先,Redis在密钥中使用花括号来确定其分片部分,因此您可以决定修改密钥并将其发送给任意分片。 现在,您需要两件事: 哪个碎片或插槽范围位于redis实例中的映射。 一
只是想知道在Android Studio中输入文本字段时,是否有一种方法可以自动在屏幕上显示文本? 例如,如果我输入一个数字,它会自动乘以20,结果显示在文本字段下方的屏幕上。