map <string,class =“”>使用和计数</string,>

时间:2014-01-17 08:06:13

标签: c++ class maps

我的项目中有很少的地图,我不知道,如何使用或简单说:我不知道如何从地图中获取一些信息,其中附有类。

我的代码(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"); ?的目的 地图如何与类一起工作?如何从具有类的地图中选择数据。非常感谢提前。 :)希望我解释了我想要的东西并给了你所需要的一切。

2 个答案:

答案 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;