【发布时间】:2016-05-07 22:29:54
【问题描述】:
我正在使用结构。有没有办法遍历所有“数字”类型的项目?
struct number { int value; string name; };
【问题讨论】:
-
我不确定这个问题。在 C++ 中,我们有“映射”,即
std::map和std::unordered_map。 See here 获取标准数据结构列表。
我正在使用结构。有没有办法遍历所有“数字”类型的项目?
struct number { int value; string name; };
【问题讨论】:
std::map 和 std::unordered_map。 See here 获取标准数据结构列表。
据我了解,您希望使用number 访问value 和name。你可以去array of structurelike
number n[5]; 其中n[0],n[1],...n[4]
但是我们在 C++ 中有一些额外的功能可以通过预定义的map, set 来实现这一点
你可以找到很多地图的例子
【讨论】:
在 c++ 中,map 的工作方式类似于 python 字典,但两种语言有基本的区别。 C++ 是有类型的,python 有鸭子类型。 C++ Map 是类型化的,它不能接受任何类型的(键,值),如 python 字典。 一个更清晰的示例代码 -
map<int, char> mymap;
mymap[1] = 'a';
mymap[4] = 'b';
cout<<"my map is -"<<mymap[1]<<" "<<mymap[4]<<endl;
您可以使用技巧来获得一个可以接受任何类型密钥的地图,请参考 - http://www.cplusplus.com/forum/general/14982/
【讨论】:
您可以使用std::map(或unordered_map)
// Key Value Types.
std::map<int, std::string> data {{1, "Test"}, {2, "Plop"}, {3, "Kill"}, {4, "Beep"}};
for(auto item: data) {
// Key Value
std::cout << item.first << " : " << item.second << "\n";
}
编译运行:
> g++ -std=c++14 test.cpp
> ./a.out
1 : Test
2 : Plop
3 : Kill
4 : Beep
std::map 和std::unordered_map 之间的区别在于std::map 中的项目按Key 排序,而std::unordered_map 中的值没有排序(因此它们将以看似随机的顺序打印)。
在内部,它们使用非常不同的结构,但我敢肯定您对这种详细程度不感兴趣。
【讨论】: