c++ 如何存储多维键值对?

pgvzfuti  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(213)

我有下面的数据序列要存储到C++容器.

Type1 -> Channel 0 -> Data1 -> Value
                   -> Data2 -> Value
                   -> Data3 -> Value
         Channel 1 -> Data1 -> Value
                   -> Data2 -> Value
                   -> Data3 -> Value
         Channel 2 -> Data1 -> Value
                   -> Data2 -> Value
                   -> Data3 -> Value
Type2 -> Channel 0 -> Data1 -> Value
                   -> Data2 -> Value
Type3 -> Channel 0 -> Data1 -> Value
                   -> Data2 -> Value
         Channel 1 -> Data1 -> Value
                   -> Data2 -> Value

在容器中存储的最佳方法是什么。我们使用C++14。
提前感谢!!
我试过下面的Map:

std::map<std::string,std::map<int,std::map<std::string, int>>> DataMap;

有没有什么优化的方法可以做到这一点?

sy5wg1nm

sy5wg1nm1#

好吧,“最好的”取决于具体情况,你没有解释你的问题,也没有解释你的数据的特征,但是你的方法在其他性能问题中往往会有很大的影响。
我建议使用std::multimap,如果你不需要元素按“Type”排序,那么使用std::unordered_multimap更好。然后使用lower_bound或equal_range,你将访问每种类型的所有数据。对于数据本身,你可以使用一个带有channel/dataname/value的struct。同样,你没有解释你的问题的特征,但是假设DataX是某种属性,我将使用一个外部string/intMap来减少内存占用。
假设类型很多而每种类型的数据很少的问题的示例:

struct Data
{
  int channel;
  std::string dataId; //recommended mapping outside
  int value;
};
std::unordered_map<std::string,Data> DataMap;

...使用外部Map

std::vector<std::string> SimpleDictionary;
struct Data
{
  int channel;
  int dataId; //dataId is the index in the SimpleDictionary
  int value;
};
std::unordered_map<std::string,Data> DataMap;

相关问题