Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 地图<;字符串,类>;使用和整理_C++_Class_Maps - Fatal编程技术网

C++ 地图<;字符串,类>;使用和整理

C++ 地图<;字符串,类>;使用和整理,c++,class,maps,C++,Class,Maps,在我的项目中,我几乎没有地图,我不知道如何使用,或者简单地说:我不知道如何从地图中获取一些信息,地图上附有类 我的代码(项目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, in

在我的项目中,我几乎没有地图,我不知道如何使用,或者简单地说:我不知道如何从地图中获取一些信息,地图上附有类

我的代码(项目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
#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
}
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)));
代码(item.cpp):

    #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
#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
}
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)));
代码(main.cpp):

    #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
#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
}
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)));
std::映射项;
//等级、耐久性、伤害、护甲、重量、等级、性别
项目.插入(标准:成对(“木剑”,项目(1,19,3,0,1,1,0));
如何从地图中提取所选阵列的一些信息?尝试在google中搜索,等等。找不到答案和解释。如果我尝试以下内容,为什么会出现错误:

cout << item["Wooden Sword"]["level"];

cout索引运算符返回对数据元素的引用,在您的情况下,它返回一个
项&
,您将其用作正常结构:

std::cout << item["Wooden Sword"].level << '\n';
std::cout使用
item.find(“木剑”)
您将获得一个到匹配的键/值对元素的
迭代器。如果没有像“木剑”这样的钥匙,则返回
end(项目)。如果不知道项目是否存在并且不想添加项目,请使用
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";

item[“木剑”]
返回对与键
“木剑”
关联的
item
对象的引用。如果要打印该
项的内容,请提供
ostream&operator如果需要在运行时指定字段名,可以向
项添加
int&operator[](const std::string&fieldname){If(fieldname==“level”)返回级别;else If(fieldname==“耐久性”)返回耐久性;else…else抛出std::runtime_error(“unknown Item field”)}
和/或
int operator[](const std::string&fieldname)const{}
。谢谢,我不认为我可以这样使用它们。