gpt4 book ai didi

c++ - 我可以在 C++11 中使用键和值都是枚举类的 std::map 吗?

转载 作者:行者123 更新时间:2023-11-30 01:17:21 25 4
gpt4 key购买 nike

我需要一种映射 C++11 的方法 enum classes到其他enum classes .假设我有这些 C++11 风格的枚举:

#include <iostream>
#include <map>

class Foobar
{
public:

enum class Lecture
{
COMP_SCI,
PHYSICS,
CHEMISTRY,
BIOLOGY,
PSYCHOLOGY,
MODERN_ART,
PHILOSOPHY,
SOCIOLOGY
};

enum class Day
{
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};
};


void test_enum_class_to_enum_class_std_map()
{
std::map<Foobar::Lecture, Foobar::Day> lectureToDayMap;

lectureToDayMap.insert(Foobar::Lecture::COMP_SCI, Foobar::Day::MONDAY);

}

int main(int argc, char** argv)
{
test_enum_class_to_enum_class_std_map();

return 0;
}

有没有一种从一个枚举类映射到另一个枚举类的方法?

我想要类似的东西

std::map<Foobar::Lecture, Foobar::Day> lectureToDayMap;

如果这不可能,我可以从 int 转换吗?到enum class反之亦然,所以我可以使用 std::map<int, int>映射并转换为 int插入,然后返回 enum class检索值?

这是我尝试第一种方法时的编译错误:

test_cpp11_enums.cpp: In function ‘void test_enum_class_to_enum_class_std_map()’:
test_cpp11_enums.cpp:51:74: error: no matching function for call to ‘std::map<Foobar::Lecture, Foobar::Day>::insert(Foobar::Lecture, Foobar::Day)’
lectureToDayMap.insert(Foobar::Lecture::COMP_SCI, Foobar::Day::MONDAY);
^
test_cpp11_enums.cpp:51:74: note: candidates are:
In file included from /usr/include/c++/4.8/map:61:0,
from test_cpp11_enums.cpp:9:
/usr/include/c++/4.8/bits/stl_map.h:594:7: note: std::pair<typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename _Alloc::rebind<std::pair<const _Key, _Tp> >::other>::iterator, bool> std::map<_Key, _Tp, _Compare, _Alloc>::insert(const value_type&) [with _Key = Foobar::Lecture; _Tp = Foobar::Day; _Compare = std::less<Foobar::Lecture>; _Alloc = std::allocator<std::pair<const Foobar::Lecture, Foobar::Day> >; typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>, std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename _Alloc::rebind<std::pair<const _Key, _Tp> >::other>::iterator = std::_Rb_tree_iterator<std::pair<const Foobar::Lecture, Foobar::Day> >; std::map<_Key, _Tp, _Compare, _Alloc>::value_type = std::pair<const Foobar::Lecture, Foobar::Day>]
insert(const value_type& __x)

感谢您的宝贵时间:)

编辑 1:修复了缺少的逗号

编辑 2:添加了我得到的编译错误

编辑 3:添加了我正在尝试的完整源代码

编辑 4:没有新代码或任何东西,只是向误解这些帖子工作原理的每个人道歉。我仍然很难理解编译错误,而且我没有在谷歌中找到我要找的东西。我认为直接询问我想要什么可能更容易,并且可能会得到关于类枚举如何与 map 一起工作(或不工作)的解释。我会继续玩我的测试源并继续在谷歌上寻找。很抱歉激怒了大家:(

编辑 5:你们好心地告诉我我的错误在哪里,谢谢。我没看到 sdt::mapinsert函数没有将键和值作为参数。起初我以为错误意味着没有std::map named insert 存在,当我在网上检查它确实存在时,我以某种方式错过了查看参数,并确信这与 enum classes 有关,因为我以前从未使用过它们。

最佳答案

根据 http://en.cppreference.com/w/cpp/container/mapstd::map 是一个已排序的关联容器,其中包含具有唯一键的键值对。因此,您必须插入一对。

替换

 lectureToDayMap.insert(Foobar::Lecture::COMP_SCI, Foobar::Day::MONDAY);

通过

mymap.insert(std::make_pair(Foobar::Lecture::COMP_SCI, Foobar::Day::MONDAY));

或更好

lectureToDayMap[Foobar::Lecture::COMP_SCI] = Foobar::Day::MONDAY;

关于c++ - 我可以在 C++11 中使用键和值都是枚举类的 std::map 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24581715/

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