станд :: Картанапечатать значение ключа - PullRequest
1 голос
/ 26 октября 2011

Моя программа написана на 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"] не может скомпилироваться.Как вывести значения (1,2) для (x, y), которые соответствуют ключу «test»?

Ответы [ 4 ]

3 голосов
/ 26 октября 2011

Мое лучшее предположение заключается в том, что в вашем 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;
}
2 голосов
/ 26 октября 2011

Создайте operator<< для своего класса Obj, а затем вы можете сделать что-то вроде std::cout << catalog["test"]; (я предполагаю, что пропущенные символы скобки в вызове вставки являются просто copy-paste-o).

1 голос
/ 26 октября 2011

Я немного изменил твой код.

#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;
    }
}
0 голосов
/ 26 октября 2011

С учетом этих типов:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...