std :: map <string,class =“”>打印键的值</string,>

时间:2011-10-25 20:14:58

标签: c++ stl

我的程序是用C ++编写的。

#include <iostream>
#include <string>
#include <map>

using namespace std;


    class Details
    {
        int x;
        int y;
    };

    typedef std::map<string, Details> Det;
    Det det;

    Details::Details(int p, int c) {
        x = p;
        y = c;
    }

    int main(){

        det.clear();

        insertNew("test", 1, 2);

        cout << det["test"] << endl;

        return 0;
    }

我想用最简单的方法打印一个键的值。例如det [“test”]无法编译。 如何打印(x,y)对应于键“test”的值(1,2)?

4 个答案:

答案 0 :(得分:3)

我最好的猜测是你的Obj中没有默认或复制构造函数(你发布的代码中没有任何代码,但我假设你有一个需要两个整数的代码)。你在catalog.insert()行中也有一个拼写错误。以下是使用您的代码对我有用的东西:

class Obj {
public:
    Obj() {}
    Obj(int x, int y) : x(x), y(y) {}
    int x;
    int y; 
   };


int main (int argc, char ** argv) {

    std::map<std::string, Obj> catalog; 
    catalog.insert(std::map<std::string, Obj>::value_type("test", Obj(1,2)));

    std::cout << catalog["test"].x << " " << catalog["test"].y << std::endl;

    return 0;
}

答案 1 :(得分:2)

为您的班级operator<<创建Obj然后您可以执行std::cout << catalog["test"];之类的操作(我假设插入调用中缺少的parens只是一个复制粘贴 - ○)。

答案 2 :(得分:1)

我改变了你的代码。

#include <map>
#include <iostream>
#include <string>

using namespace std;
class Obj {
    public:
            Obj( int in_x, int in_y ) : x( in_x ), y( in_y )
            {};
            int x;
            int y;
    };

int main()
{
    std::map< string, Obj* > catalog; 
    catalog[ "test" ] = new Obj(1,2);

    for( std::map<string, Obj*>::iterator i=catalog.begin(); i != catalog.end(); ++i )
    {
            cout << "x:" << i->second->x << " y:" << i->second->y << endl;
    }
}

答案 3 :(得分:0)

鉴于以下类型:

class Obj {
    int x;
    int y; };

std::map<string, Obj> catalog; 

给定填充的catalog对象:

for(auto ob = catalog.begin(); ob != catalog.end(); ++ob)
{
   cout << ob->first << " " << ob->second.x << " " << ob->second.y;
}