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

时间:2011-10-26 12:04:44

标签: c++ vector shared-ptr

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

示例

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

对于我使用的这个要求

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

新的要求是创建一个新的“类人”,每个项目将包含更多数据

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

我正在解决此问题,以便找到存储和共享这些数据的最佳方式。

vector<class person> city[256];

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

5 个答案:

答案 0 :(得分:1)

城市,人......考虑数据库的时间。

答案 1 :(得分:0)

或使用矢量矢量?或矢量列表?

答案 2 :(得分:0)

您可以使用shared_ptr或本机指针,也可以将其存储为值。这取决于。你想要最快的观察吗?你想节省内存吗?你想要连续内存中的数据吗?你想支持线程吗?没有一般的正确答案。 256个对象不是大量的数据。

答案 3 :(得分:0)

我不会说指针更好是如此明显。是的,您可以将shared_ptr存储在收藏中,但根据您访问数据的方式,您可能更愿意使用listmap

答案 4 :(得分:0)

如果你有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
}