我假设当您说“擦除最后一个元素”时,您的意思是“擦除最旧的元素”。
我不会使用字符串作为时间,而是使用日期/时间类型(如 unix 时间戳)。然后它们将按时间排序,而不是按字典顺序排序,你可以myLocations.erase(myLocations.begin())
,因为最旧的总是在开头。
更好的是,使用 a和 use按时间查找元素。这将自动为您删除最旧的,并且在按时间查找元素时具有相同的逻辑复杂度。添加数据时也更快。对于您的情况,这几乎是全赢的。如果您真的想避免,那么 a最适合您的需求,并提供出色的性能,但如果您已经有工作,那么留在 a可能是最好的。boost::circular_buffer
<std::pair<timetype, LocationStruct>>
std::lower_bound
boost
std::deque
map
std::map
以下是如何在 a 中进行查找deque
:
typedef ???? timetype;
typedef std::pair<Timetype, LocationStruct> TimeLocPair
typedef std::deque<TimeLocPair> LocationContainer;
typedef LocationContainer::const_iterator LocationIterator;
bool compareTimeLocPair(const TimeLocPair& lhs, const TimeLocPair& rhs)
{return lhs.first < rhs.first;}
LocationIterator find(const LocationContainer& cont, timetype time) {
TimeLocPair finder(time, LocationStruct());
LocationIterator it = std::lower_bound(cont.begin(), cont.end(), finder, compareTimeLocPair);
if (it == cont.end() || it->first != time)
return cont.end();
return it;
}