У меня было это в сценарии ниже и закрытие & amp; повторное открытие Visual Studio 2015 решило это для меня.
Несмотря на то, что OP уже упоминал, что он
, даже если я закрою все, начну новый проект ...
Я публикую это решение для тех, кто еще не пробовал.
Ссылка - Спасибо Джон Шнайдер
У нас есть библиотека, которую мы храним в частном репозитории Nuget. Вместо того, чтобы создавать бета-версии, иногда я просто компилирую библиотеку локально, удаляю ссылку на пакет nuget и добавляю ссылку в локальную корзину библиотеки. При перестройке проекта иногда я получаю эту ошибку. Закрытие и повторное открытие проекта разрешает его, и я могу построить.
Я вижу, что set_intersection ()
и др. из заголовка алгоритма
не будут работать, поскольку они явно требуют сортировки входных данных - думаю, вы их уже исключили.
Мне пришло в голову, что «наивный» подход итерации по хешу A и поиск каждого элемента в хэше B должен фактически дать вам почти оптимальную производительность, поскольку последовательные поиски в хеш-коде B будут выполняться в одном и том же хеш-ведре (при условии, что оба хэша используют одну и ту же хеш-функцию). Это должно дать вам приличную локализацию памяти, даже если эти сегменты почти наверняка реализованы как связанные списки.
Вот код для unordered_set_difference ()
, вы можете настроить его, чтобы сделать версии для set union и set разница:
В этом нет ничего особенного - для пересечения просто пройдите через каждый элемент одного и убедитесь, что он находится в другом. Для объединения добавьте все элементы из обоих входных наборов.
Например:
void us_isect(std::tr1::unordered_set<int> &out,
const std::tr1::unordered_set<int> &in1,
const std::tr1::unordered_set<int> &in2)
{
out.clear();
if (in2.size() < in1.size()) {
us_isect(out, in2, in1);
return;
}
for (std::tr1::unordered_set<int>::const_iterator it = in1.begin(); it != in1.end(); it++)
{
if (in2.find(*it) != in2.end())
out.insert(*it);
}
}
void us_union(std::tr1::unordered_set<int> &out,
const std::tr1::unordered_set<int> &in1,
const std::tr1::unordered_set<int> &in2)
{
out.clear();
out.insert(in1.begin(), in1.end());
out.insert(in2.begin(), in2.end());
}