gpt4 book ai didi

c++ - STL 映射到通用 vector C++

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:29 25 4
gpt4 key购买 nike

我想实现一个映射,将字符串映射到通用 vector 。

我想这样做:

std::map<std::string, std::vector<class T> > myMap;

假设提议的 myMap 中插入了以下内容,它可以这样使用:

vector<int> intVec = myMap["ListOfInts"]; // Works because "ListOfInts" maps to a vector<int>
vector<string> stringVec = myMap["ListOfStrings"]; // Works because "ListOfInts" maps to a vector<string>

当我用上述语法声明映射时,编译器心脏病发作了。

有人可以提出任何建议吗?或者 C++ 中更好的关联数组选项(建议在提升之前非提升)。

最佳答案

由于您在编写代码时知道所需的类型,因此我建议采用这种方法(未经测试):

// base class for any kind of map
class BaseMap {
public:
virtual ~BaseMap() {}
};

// actual map of vector<T>
template<typename T>
class MapT : public BaseMap, public std::map<std::string, std::vector<T>> {};

class MultiMap {
public:
template<typename T>
std::vector<T>& get(const std::string& key) {
std::unique_ptr<BaseMap>& ptr = maps_[std::type_index(typeid(T))];
if (!ptr) ptr.reset(new MapT<T>());
return ptr->second[key];
}
private:
std::map<std::type_index, std::unique_ptr<BaseMap>> maps_;
}

int main() {
MultiMap map;
std::vector<int>& intVec = map.get<int>("ListOfInts");
std::vector<std::string>& stringVec = map.get<std::string>("ListOfStrings");
}

关于c++ - STL 映射到通用 vector C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32641893/

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