c++中,将五对key、value的键值对,key的值是相同的,value值的类型不同如何存储
时间: 2024-10-20 17:10:31 浏览: 22
在C++中,如果需要存储五对key-value键值对,其中key值相同但value值类型各异,你可以考虑使用关联容器如`std::map`或者`std::unordered_map`。然而,由于`map`不允许插入具有相同键的不同元素,你需要先确定一种策略处理这种情况。
一种可能的方式是创建一个多态的基类或者接口`ValueHolder`,然后为每个不同的value类型创建一个派生类并实现这个接口。例如:
```cpp
#include <iostream>
#include <map>
#include <typeinfo>
// 基类 ValueHolder
class ValueHolder {
public:
virtual ~ValueHolder() {}
virtual void display() const = 0;
};
// 派生类示例,不同类型value
class IntValue : public ValueHolder {
public:
int value;
IntValue(int val) : value(val) {}
void display() const override { std::cout << "Int: " << value << std::endl; }
};
class DoubleValue : public ValueHolder {
public:
double value;
DoubleValue(double val) : value(val) {}
void display() const override { std::cout << "Double: " << value << std::endl; }
};
// 存储结构
template <typename Key, typename Value>
class MultiValuedMap {
private:
std::map<Key, ValueHolder*> map;
public:
// 插入函数
void insert(const Key& key, const Value& value) {
if (auto* derived_value = dynamic_cast<const Value*>(&value)) {
map[key] = new DerivedValueHolder(*derived_value);
} else {
throw std::runtime_error("Unsupported value type");
}
}
// 显示所有键值对
void showAll() {
for (const auto& pair : map) {
pair.second->display();
}
}
};
int main() {
MultiValuedMap<std::string, int> intMap;
MultiValuedMap<std::string, double> doubleMap;
intMap.insert("Key", 5);
doubleMap.insert("Key", 4.2);
intMap.showAll(); // 输出:Int: 5
doubleMap.showAll(); // 输出:Double: 4.2
return 0;
}
```
阅读全文