如何将对象放入std::映射中

How to put objects in a std::map?

本文关键字:std 映射 对象      更新时间:2023-10-16

试图找出如何在地图中放置对象,而作者是关键,但似乎找不到如何做到这一点。

这是我的类对象和构造函数

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;

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

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

您可以使用Iterator使用author访问Book对象,反之亦然。

Map是一个对的集合。因此,为了在地图中插入一些东西,必须首先将其制成一对。参见以下示例:

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;

因此,您需要从矢量填充贴图。你可以通过做到这一点

for_each(books.begin(), books.end(), [&authorMap] (Book & b) { authorMap[b.author]=b; } );

不要忘记´#include<算法>´。

如果你是lambdas的新手(或者没有使用C++11),这与是一样的

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

我还应该指出,如果一位作者写了不止一本书,你的解决方案会有问题。

请参阅地图文档:

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) );