2014-01-17 57 views
0

我在我的项目中有几张地图,我不知道,如何使用或简单地说:我不知道如何从地图上获取一些信息,连接。map <string,class>使用和couting

我的代码(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"); ? 怎么做带班地图工作?我如何从具有类的地图中选择数据。提前真的很感谢。 :)希望我解释我想要什么,并给你你需要的一切。

+1

'item [“Wooden Sword”]'返回一个对与'木剑'键相关的'Item'对象的引用。如果你想打印这个'Item'的内容,提供一个'ostream&operator <<(ostream &&,Item const&)'重载,或者如果你想要的只是关卡的话,可以使用'cout << item [“Wooden Sword”] .level;' – Praetorian

+0

如果您需要在运行时指定字段名称,您可以添加到您的'Item'类:'int&operator [](const std :: string&fieldname){if(fieldname ==“level”)return水平;否则,如果(fieldname ==“durability”)返回耐久性; else ... else throw std :: runtime_error(“unknown Item field”); }'和/或'int operator [](const std :: string&fieldname)const {<与上面相同的主体>}'。 –

回答

0

的索引操作符返回的数据元素的引用,在你的情况下,它返回您作为一个正常的结构使用Item&

std::cout << item["Wooden Sword"].level << '\n'; 

至于find函数返回一个迭代器。如果你不了解迭代器,请先研究它们。

如果您想要一个很好的参考,请参阅this site

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; 
+0

谢谢你没想到我可以像这样使用它们。 – user3205662

相关问题