我的项目中有很少的地图,我不知道,如何使用或简单说:我不知道如何从地图中获取一些信息,其中附有类。
我的代码(item.h):
#ifndef ITEM_H
#define ITEM_H
class Item
{
public:
int level, durability, damage, armor, weight, grade, sex;
Item(int _level, int _durability, int _damage, int _armor, int _weight, int _grade, int _sex);
Item();
virtual ~Item();
protected:
private:
};
#endif // ITEM_H
代码(item.cpp):
#include "include/Item.h"
Item::Item(int _level, int _durability, int _damage, int _armor, int _weight, int _grade, int _sex)
{
level = _level;
durability = _durability;
damage = _damage;
armor = _armor;
weight = _weight;
grade = _grade;
sex = _sex;
}
Item::Item(): level(0), durability(20), damage(0), armor(0), weight(1), grade(1), sex(0)
{
//dtor
}
Item::~Item()
{
//dtor
}
代码(main.cpp):
std::map<std::string, Item> item;
// level, durability, damage, armor, weight, grade, sex
item.insert(std::pair<std::string, Item>("Wooden Sword", Item(1, 19, 3, 0, 1, 1, 0)));
如何从地图中选择所选数组中的某些信息?尝试在谷歌等搜索找不到答案和解释如果我尝试这样的事情,为什么我会收到错误:
cout << item["Wooden Sword"]["level"];
您可以使用item.find("Wooden Sword"); ?
的目的
地图如何与类一起工作?如何从具有类的地图中选择数据。非常感谢提前。 :)希望我解释了我想要的东西并给了你所需要的一切。
答案 0 :(得分:0)
索引运算符返回对数据元素的引用,在您的情况下,它返回您用作普通结构的Item&
:
std::cout << item["Wooden Sword"].level << '\n';
对于find
函数,它返回一个迭代器。如果您不了解迭代器,请先研究它们。
如果您想要一个好的参考,请参阅例如this site
答案 1 :(得分:0)
使用item.find("Wooden Sword");
,您可以获得匹配的键/值对元素的iterator
。如果没有像“木剑”那样的键,则返回end(item);
。如果您不知道该项目是否存在且不想添加该项目,请使用find
。
auto it = item.find("Wooden Sword");
if (it != end(item))
{
std::cout << it->level; // use the -> operator
// std::string key = it.first;
// Item& item = it.second;
}
else
std::cout << "There is no Wooden Sword";
[]
运算符返回对匹配项的引用。如果没有与此键关联的项目,则会在此位置插入新项目。
std::cout << item["Wooden Sword"].level;