如何在c++中存储和引用大量数据

how to store and reference large amount of data in c++

本文关键字:引用 数据 存储 c++      更新时间:2023-10-16

我正在使用字符串向量,以便在内存中存储一些数据。数据库不是一个选项。更准确地说,是字符串的向量数组。一个简单的场景:我需要存储居住在256个城市的人的名字。

例子
NewYork: John, Bod, ...
London: Jim, Bill...

对于这个要求我使用

vector<std::string> city[256];

一个新的需求是创建一个新的"类Person",它将为每个条目保存更多的数据

class person {
 string name;
 string surname;
 string email;
 int age;
};

我解决这个问题是为了找到存储和共享这些数据的最佳方式。

vector<class person> city[256];

显然使用指向对象的指针更好。shared_ptr在这里适用吗?我们有TR1安装在系统中,但我们不能使用boost库。

如果您使用c++ 11并且只需要该数据的单一全局版本,则可以使用如下数据结构:

#include <unordered_map>
#include <unordered_set>
#include <string>
typedef std::unordered_multiset<std::string> name_set;
typedef std::unordered_map<std::string, name_set> city_map;
city_map city_db {
  { "Moscow", { "Ivan", "Igor", "Vladimir" } },
  { "Madrid", { "Julio", "Pedro", "Sanchez" } },
  { "Munich", { "Sepp", "Huber", "Maier" } }
};
int main()
{
  return city_db["Munich"].size(); // just as an example
}

城市,人…是时候考虑数据库了。

还是使用向量的向量?还是一个向量列表?

您可以使用shared_ptr,或本机指针,或存储为值。视情况而定。你想要最快的查询吗?你想节省内存吗?您希望数据在连续内存中吗?你想支持线程吗?没有一般的正确答案。256个对象的数据量并不大

我不会说指针明显更好。是的,您可以在集合中存储shared_ptr,尽管根据您访问数据的方式,您也可能更喜欢使用listmap来代替。