C++ 映射的键/值的用户自定义名称?
C++ User-defined names for keys/values of map?
在 c++ 中遍历映射(或unordered_map(时,键和值通过 .first 和 .second 访问。但是有没有办法以更有意义的方式访问键/值对呢?
例如,如果我将代数表达式存储在map中<集合int>为:集合int>
x - 2yz + 3xyz --> expr = { {{'x'}, 1}, {{'y','z'}, -2}, {{'x','y','z'}, 3} }
而且我想遍历地图,想要做的似乎很自然:
for(auto & term : expr)
term.vars ...
term.coeff ...
而不是
for(auto & term : expr)
term.first ...
term.second ...
有什么方法可以通过struct Term { set<char> vars; int coeff; };
实现这一目标吗?我看不出有任何方法可以将这样的结构与map集成,但是我也想不出任何根本原因,为什么它是不可能的,因为例如它在python中是微不足道的:[(vars,coeff) for vars,coeff in expr.items()]
。
如果您可以使用c++17
,则可以使用structured bindings
来分解该对
for (auto [vars, coeff] : expr) { ... }
无需更改其他任何内容。
如果您不能使用c++17
那么您的Term
结构可以在std::vector
或其他sequence container
中使用,因为您已经取消了关联性并将其放在结构本身中。
您可以使用结构化绑定:
for (auto & [vars, coeff]: expr) {
f(vars);
g(coeff);
}
这需要C++17。
相关文章:
- C++ 映射的键/值的用户自定义名称?
- 使用结构绑定更改自定义结构的值
- 自定义异常中的用户定义的空构造函数,具有多个继承和抽象基类
- 从 QAbstractItemModel 返回自定义用户类型
- LLDB:实现接受用户输入的自定义命令
- 如何在Maya中选择自定义网格组件后立即发布用户事件
- 无法引用自定义用户控件
- 如何将重新绑定与自定义分配器和自定义列表一起使用
- QTcp服务器:使用自定义选项绑定套接字
- 全部使用用户自定义功能和MPI_BOTTOM
- Qt用户可自定义的热键
- 可以将STD :: StreamBuf的自定义实现中的异常交付给流用户
- Lua:为自定义用户数据提供一个字符串方法
- 是否可以编写一个自定义 STL 分配器,该分配器使用指向用户提供的分配函数的指针
- 当用户自定义哈希函数在 unordered_map 中时,无法解码 g++ 中模糊的编译器错误
- 如何在 C++11 的用户自定义类模板中继承 std::vector 模板
- RCDATA 和用户自定义资源有什么区别?
- 如何在编写自定义用户操作时引用内置操作
- C++自定义用户输入调用变量
- DB2用户定义的函数和自定义模式