【发布时间】:2019-07-06 15:57:01
【问题描述】:
我想创建一个类,里面有一个std::tuple 和std::unordered_map。
我想创建一个方法来合并元组内的地图。
#include <tuple>
#include <unordered_map>
template <typename ... Ts, std::size_t ... Is>
std::tuple<Ts...> merge_map (std::tuple<Ts...>& t1, std::tuple<Ts...> & t2, std::index_sequence<Is...> const &) {
return {
(std::get<Is>(t1).merge( std::get<Is>(t2)))...
};
}
template <class ...Ts>
struct MyContainer
{
std::tuple<Ts...> data;
void merge(MyContainer<Ts...>& other){
data = merge_map(data, other.data, std::make_index_sequence<sizeof...(Ts)>{});
}
};
int main()
{
using namespace std;
unordered_map<string, int> f = {{"zero", 0}, {"one", 1}};
MyContainer <unordered_map<string, int>> container1 = {.data = f};
unordered_map<string, int> s = {{"two", 2}, {"three", 3}};
MyContainer <unordered_map<string, int>> container2 = {.data = s};
container1.merge(container2);
}
但我无法编译这段代码。
我试图用 int 的 un std::tuple 创建一个简单的例子,然后对它们求和,它起作用了。但我坚持这个更复杂的例子。
感谢您的任何建议。
【问题讨论】:
标签: c++ c++17 variadic-templates template-meta-programming unordered-map