如何将对象放入std::映射中
How to put objects in a std::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;
您可以尝试像这样插入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) );
相关文章:
- C++匿名结构作为std::映射值
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 将唯一指针插入std::映射
- 重载std::映射不同的密钥类型
- std::映射,只有move构造函数可用
- std::映射服装比较函数和函数/lambda错误
- std::映射导致插入时出现C2664错误
- 将从std::映射中获取的std::pair引用传递给接受std::对引用的函数
- std::映射键作为模板化结构与枚举成员
- std ::映射以构造为钥匙
- 在锁定下清除STD ::映射,而移动到临时对象
- 计算向量的std ::映射为键的值,并将双倍作为值
- 写入/读取 std::映射到二进制文件需要运算符
- 我如何正确地为std ::映射分配内存
- 如何打印包含整数和整数集的std::映射
- 在字符串的std::映射中找到编译错误,long
- 将std ::映射复制到std ::对向量
- 使用std ::映射的键的部分匹配
- 遍历std ::映射,效果少于迭代器之间的比较