如何将对象放在std :: map中?

时间:2014-04-20 15:13:32

标签: c++ object map

试图找出如何将对象放置在作者是关键但似乎无法找到如何操作的地图中。

使用构造函数

继承我的类对象
class Book
{ 
public:
string title = "";
string author = "";
int ISBN = 0;

Book(string t, string a, int num) 
{ 
    title = t; 
    author = a; 
    ISBN = num;
    if (ISBN < 1000 || ISBN > 9999)
        throw ("Invalid ISBN");
    assert(ISBN > 1000 || ISBN < 9999);
}
};

这是矢量和地图

    vector <Book> books;
try
{
    Book book1("a", "Jim John", 1001);
    books.push_back(book1);
    Book book2("b", "Jim John", 1002);
    books.push_back(book2);
    Book book3("c", "Billy Bill", 1003);
    books.push_back(book3);
    Book book4("d", "Greg Lumburge", 1004);
    books.push_back(book4);
    Book book5("e", "Dallas Orange", 1005);
    books.push_back(book5);
    Book book6("f", "Old McDonald", 1006);
    books.push_back(book6);
}
catch (char*e)
{ 
    cout << "invalid ISBN" << endl; 
    return(EXIT_FAILURE);
}

    map<string, Book> authorMap;

for (auto x : authorMap)
    cout << x.first<< " : "<< x.second << endl;

4 个答案:

答案 0 :(得分:1)

您可以像这样尝试插入API。

authorMap.insert ( "Dallas Orange",book5);

authorMap.insert ( "Jim John", Book ("a", "Jim John", 1001));

您可以使用迭代器使用作者访问Book对象,反之亦然。

答案 1 :(得分:0)

请参阅地图文档:

http://www.cplusplus.com/reference/map/map/insert/

对于您的用例,您可以这样做:

std::map<string,Book> authorMap;
Book book("a", "Jim John", 1001);
authorMap.insert ( std::pair<string,Book>(book.author,Book) );

答案 2 :(得分:0)

因此,您希望从矢量填充地图。你可以通过

来做到这一点
for_each(books.begin(), books.end(), [&authorMap] (Book & b) { authorMap[b.author]=b; } );

不要忘记'#include&lt;算法&gt;'虽然。

如果您是lambdas的新手(或者不使用C ++ 11),这与

相同
for(vector<Book>::const_iterator it = books.begin(); it!=books.end(); ++it)
{
    authorMap[it->author] = *it;
}

我还应该指出,如果一位作者撰写了多本书,您的解决方案就会出现问题。

答案 3 :(得分:0)

地图是成对的集合。因此,为了在地图中插入内容,必须先将其制作成一对。请参阅以下示例:

std::map<char, int> charIntMap;
std::pair<char, int> charIntPair('a', 65);

charIntMap.insert(charIntMap.end(), charIntPair);
charIntMap.insert(charIntMap.end(), std::pair<char, int>('b', 66));

现在,另一种在地图中插入内容的方法是利用[]运算符。这是它的样子:

charIntMap['c'] = 67;