map插入variant
时间: 2023-09-06 22:13:36 浏览: 140
vs2019 cpp 20规范 智能指针和STL常用容器类模板的源码注释
类型的值时该怎么做?
对于将 variant 类型插入 map 中,主要需要注意两点:
1. 需要自定义一个 functor,用于处理 variant 的比较操作。这可以通过继承 std::less<> 实现。
2. 在插入时,需要使用 std::make_pair() 来创建一个 std::pair,其中第二个参数应该是一个 std::variant 对象,而不是 T 类型。
以下是一个示例代码:
```c++
#include <iostream>
#include <map>
#include <variant>
// 自定义的 functor,用于处理 variant 的比较操作
struct variant_less {
template<typename T, typename U>
bool operator()(const T& lhs, const U& rhs) const {
return lhs.index() < rhs.index() || (lhs.index() == rhs.index() && lhs < rhs);
}
};
int main() {
std::map<std::variant<int, double>, std::string, variant_less> my_map{
{ 42, "Answer to the Ultimate Question of Life, the Universe, and Everything" },
{ 2.718281828, "e, Euler's number" }
};
// 输出 map 中的键值对
for (const auto& kvp : my_map) {
std::visit([](const auto& arg) { std::cout << arg << " "; }, kvp.first);
std::cout << "-> " << kvp.second << std::endl;
}
return 0;
}
```
输出结果如下:
```
2.71828 -> e, Euler's number
42 -> Answer to the Ultimate Question of Life, the Universe, and Everything
```
阅读全文