首先对不起,如果我问愚蠢的问题,但我是c ++的初学者。
我正在编写一个代表库的系统,并且我的Library类的成员函数应该允许我们删除一本书。现在,如果图书由用户借出,则表示我的_usersLoaningMultimap
(multimap<UserId,LoanInfo>
)中有一个元素。如何在不知道密钥(UserId)的情况下找到我想要的LoanInfo?
bool Library::removeBook(const BookId& bookId){
//how to find my book in my library without knowing who loaned it.
}
为了更清楚,我的班级图书馆是这样的:
class Library {
public:
Library();
void addUser(const UserId&, const string&);
Optional<string>& getUserInfo(const UserId& userId);
void addBook(const BookId& bookId, const string& description);
Optional<string>& getBookInfo(const BookId& bookId);
bool returnBook(const UserId& userId, const BookId& bookId);
void loanBook(const UserId& userId,LoanInfo& loan);
bool removeUser(const UserId& userId);
void getLoansSortedByDate(const UserId,std::vector<LoanInfo>& loanVector);
~Library() {}
private:
map<BookId, string> _bookMap;
map<UserId, string> _userMap;
multimap<UserId, LoanInfo> _usersLoaningMultimap;
};
答案 0 :(得分:2)
你必须像这样迭代整个地图:
for(multimap<userId,LoanInfo>::iterator it = _usersLoaningMultimap.begin(); it != _usersLoaningMultimap.end(); it++){
//it->first retrieves key and it->second retrieves value
if(it->second == loan_info_you_are_searching){
//do whatever
}
}
答案 1 :(得分:0)
std::multimap
没有提供任何值查找方法。您唯一的选择是阅读多图寻找特定值。
您可以将std::find_if用于此目的:
using const_ref = std::multimap<UserId, LoanInfo>::const_reference;
std::find_if(_usersLoaningMultimap.begin(), _usersLoaningMultimap.end(),
[&](const_ref a) -> bool {
return a.second == your_loan_info;
});
如果您不喜欢语法,您也可以自己创建函数:
using Map = std::multimap<UserId, LoanInfo>;
auto findLoanInfo(const Map& map, const LoanInfo& info) -> Map::iterator {
for (auto it = map.begin(); it != map.end(); ++it) {
if (it->second == info) {
return it;
}
}
return map.end();
}