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