如何在c++中存储和引用大量数据
how to store and reference large amount of data in c++
我正在使用字符串向量,以便在内存中存储一些数据。数据库不是一个选项。更准确地说,是字符串的向量数组。一个简单的场景:我需要存储居住在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
,尽管根据您访问数据的方式,您也可能更喜欢使用list
或map
来代替。
相关文章:
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 设计将引用元素移动到开头的数据结构.C++
- 很好的语法来获取对向量/数组数据的大小引用?
- 在结构中使用 switch 引用结构中的数据C++
- 具有引用数据成员的结构不是文本类型吗?
- 引用数据的 int 指针
- 如何在 c++ 中使用不同的键引用数据
- 为什么INVOKE总是取消引用数据成员,而不是在可能的情况下调用
- 具有引用数据类型的函数多态性
- 如果类具有引用数据成员,为什么编译器不合成默认赋值运算符
- 引用数据类型的 & 符号是否返回引用本身的地址或它所引用的值
- 组合常量和非常量引用数据成员的单个类
- c++垃圾收集和循环引用数据
- 从成员函数引用数据成员时出错
- 基类静态引用数据成员上的C++对象切片行为的奇怪案例
- 具有引用数据成员的类的默认构造函数
- 引用数据成员和移动构造函数
- 引用数据类成员访问模式
- 如何处理赋值操作符和复制构造函数中的引用数据成员