【问题标题】:Data Structure that stores object with names存储具有名称的对象的数据结构
【发布时间】:2014-09-29 10:30:22
【问题描述】:

我想存储具有特定名称的对象。

我想使用struct,然后将它们存储在vector,但有人建议我宁愿使用不同的数据结构,更简单一点,但我似乎找不到。

我目前的(“复杂”)解决方案:

//in header file
struct objStorage{
   Classname obj;
   string name;
};
vector<objStorage> vec;

//in constructor
objStorage firstObj;
firstObj.obj = new Classname();
firstObj.name = "foo";
vec.push_back(firstObj);

有没有更简单的解决方案(数据结构)?

我应该补充一点,一旦我将结构存储(复制?)在向量中,我就不需要该结构,因为这一切都发生在另一个类(构造函数)中,所以我不希望在调用构造函数时出现任何问题次。

【问题讨论】:

  • 你想怎么用这个?按名字查东西?按名称顺序列出它们?您还将obj 设置为new Classname"foo" - 所以这不会编译。谁删除了new Classname()
  • 我需要稍后按名称查找它们,是的。我的意思是第一个对象,我会编辑它。析构函数负责删除类名
  • 你为什么不去哈希映射?这不是反问,我想知道是不是有什么特殊的要求不能使用。
  • @Happy 我是 C++ 新手,所以我没有考虑过。我马上查一下

标签: c++ object vector data-structures struct


【解决方案1】:

如果您想通过某个键(例如字符串)来查找项目,经典的使用方法是 map

std::map<std::string, Classname> items;
std::pair<std::map<std::string, Classname>::iterator, bool> inserted =
    items.insert(std::make_pair(std::string("foo"), Classname()));
items["bar"] = Classname();

在这个设置中,如果你真的认为你想使用指针,你应该考虑某种形式的智能指针。

还有其他选项,例如,C++11 引入了其他查找结构 - 例如无序的地图。

【讨论】:

  • 这正是我所需要的,我来自 java 但完全忘记了地图
猜你喜欢
  • 2014-10-10
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
  • 2017-01-24
  • 2012-02-05
  • 2016-07-08
相关资源
最近更新 更多