Моя цель - использовать set
вместо map
. У меня есть Product
класс, содержащий map
Преобразование карты в набор STL
map<time_t, double> priceHistory;
и используется в функции output
void Product::output() const
{
cout << "Id: " << id << endl
<< "Price: $"
<< fixed << setprecision(2)
<< price;
// Also output price history.
cout << " (";
cout << "History:";
// USE ITERATOR TO TRAVERSE map.
for (map<time_t, double>::const_reverse_iterator iter = priceHistory.rbegin();
iter != priceHistory.rend(); iter++)
{
// ADD CODE TO DISPLAY PRICE AND TIME OF CHANGE.
// PASS TIME TO HELPER FUNCTION displayTime.
cout << " " << iter->first;
displayTime(iter->second);
}
cout << ")" << endl;
}
Так что я изменить map
к:
set<time_t> priceHistory;
и реализовать набор как
for (set<time_t>::const_reverse_iterator iter = priceHistory.rbegin();
iter != priceHistory.rend(); iter++)
{
// ADD CODE TO DISPLAY PRICE AND TIME OF CHANGE.
// PASS TIME TO HELPER FUNCTION displayTime.
cout << " " << *iter;
displayTime(*iter);
}
, но сейчас я получаю сообщение об ошибке в основном, где определена priceHistory:
Error 1 error C2676: binary '[' : 'std::set<time_t,std::less<_Kty>,
std::allocator<_Kty>>' does not define this operator or a conversion
to a type acceptable to the predefined operator
time_t currTime = time(NULL);
priceHistory[currTime] = newPrice;
Я не уверен, где моя ошибка (ы) в этом случае?
'std :: map' сохраняет {ключ, значение} пары. 'std :: set' хранит только ключи. Переключившись на 'std :: set', у вас больше нет места для хранения' newPrice'. Так что либо держите карту, либо отбрасывайте 'newPrice', как в' priceHistory.insert (currTime) '(конечно, без цен, это не будет большой ценой). –
«Моя цель - использовать набор вместо карты» - это как сказать «моя цель - использовать молот вместо отвертки» - они разные инструменты для разных задач, либо вы меняете даже задачу, которую пытаетесь решить, либо вы будете терпеть неудачу. –