Нужно хранить в map
только N
отсортированных значений.
map.size() < N
, тогда добавляем элементы.map.size() > N
, тогда добавляем новые элементы, удаляя лишние.Вариант не добавлять новые элементы в map
, если достигнут лимит N
, не подходит. Идея заключается в том, чтобы всегда хранить актуальные данные, которые обновляются.
Может при каждой операции добавления пробегать итератором и удалять лишние элементы? Как-то так:
map // список с 3 элементами
map.insert(); // 4 элемента
// удаляем все элементы, кроме первых 3х
Но мне такая реализация кажется будет медленной.
Может у кого-то есть другое, более элегантное решение?
Если я правильно понел, вы хотите оставлять первые size
элементов. Тогда предложу вариант, например, такой:
template <size_t k, typename K, typename V,
typename T = std::pair<K, V>>
std::map<K, V>&
inserter(std::map<K, V>& m, const T& p)
{
m.insert(p);
if (m.size() > k)
m.erase(std::next(m.begin(), k), m.end());
return m;
}
и пример использования:
int main() {
std::map<std::string, int> map;
constexpr size_t size = 7;
int k = 10;
std::string s("B");
while (k++ < 20) {
s += char('A' + rand()% k);
inserter<size>(map, { s, k });
}
// использовать map(имеет не более чем 7 элементов
return 0;
}
Мне кажется вам подойдет QCache, которому можно установить максимальное число элементов, превышая которое ранние элементы перетираются.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Хотелось бы через libcurl отправлять свой Unicode текст и получать ответ на вот этом сайте https://wwwdcode
UPD: удалил вторую часть вопроса, оставил чисто мьютекс и лок-гард
Я могу создать файл и через программный код записывать в него строки с тегами каждый раз, когда это понадобитсяНо, если в Qt существует какая-нибудь...
Почему оператор lock () предназначен для приема только параметров ссылочного типа?