gpt4 book ai didi

c++ - 将 map 转换为在 STL 中设置

转载 作者:行者123 更新时间:2023-11-30 02:36:22 36 4
gpt4 key购买 nike

我的目标是使用 set 而不是 map。我有一个包含 map

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

我不确定在这种情况下我的错误在哪里?

最佳答案

A std::map存储键值对。

map<time_t, double> priceHistory;

这意味着您可以在指定时间存储价格。

std::set只存储 key 。

set<time_t> priceHistory;

这意味着您现在只能存储时间。

你不能这样做:

priceHistory[currTime] = newPrice;

这会起作用:

priceHistory.insert(currTime);

如果您仍然坚持使用 std::set,请制作一对 {time,price} 并将其保留在 set 中。

set<pair<time_t,double> > priceHistory;

std::set如果你想执行一些数学运算,如并集、交集等,这将是一个不错的选择。这些操作在 header 中可用 <algorithm>

但是如果您想要真正快速的键值查找,请考虑使用 unordered_map(hashtable)

关于c++ - 将 map 转换为在 STL 中设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32900968/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com