Das erstellt nicht und ich verstehe den Kompilierungsfehler nicht.Warum kann ich nicht std :: diese std :: unordered_map partitionieren?
#include <unordered_map>
#include <algorithm>
int main()
{
std::unordered_map<int, size_t> occurences = { { 10, 2 }, { 20, 5 }, { 30, 0 }, { 40, 5 }, { 50, 0 }, { 100, 9 } };
auto newEnd = std::partition(occurences.begin(), occurences.end(), [](const std::pair<int, size_t> &p)
{
return p.second == 0;
});
return 0;
}
g ++ beschwert sich wie folgt. VS2013 ist noch kryptischer.
/usr/local/include/c++/6.3.0/bits/stl_pair.h: In instantiation of 'void std::pair<_T1, _T2>::swap(std::pair<_T1, _T2>&) [with _T1 = const int; _T2 = long unsigned int]': /usr/local/include/c++/6.3.0/bits/stl_pair.h:473:7: required from 'void std::swap(std::pair<_T1, _T2>&, std::pair<_T1, _T2>&) [with _T1 = const int; _T2 = long unsigned int]' /usr/local/include/c++/6.3.0/bits/stl_algobase.h:148:11: required from 'void std::iter_swap(_ForwardIterator1, _ForwardIterator2) [with _ForwardIterator1 = std::__detail::_Node_iterator, false, false>; _ForwardIterator2 = std::__detail::_Node_iterator, false, false>]' /usr/local/include/c++/6.3.0/bits/stl_algo.h:1500:20: required from '_ForwardIterator std::__partition(_ForwardIterator, _ForwardIterator, _Predicate, std::forward_iterator_tag) [with _ForwardIterator = std::__detail::_Node_iterator, false, false>; _Predicate = main()::&)>]' /usr/local/include/c++/6.3.0/bits/stl_algo.h:4524:30: required from '_BIter std::partition(_BIter, _BIter, _Predicate) [with _BIter = std::__detail::_Node_iterator, false, false>; _Predicate = main()::&)>]' main.cpp:12:4: required from here /usr/local/include/c++/6.3.0/bits/stl_pair.h:416:6: error: no matching function for call to 'swap(const int&, const int&)' swap(first, __p.first);
Soweit ich diese Karte sagen kann, erfüllt die Anforderungen std :: Partitionstyp aufgelistet auf cppreference.com so stumped ich bin. Meine Frage ist, warum baut es nicht?
Was möchten Sie tun? Eine 'std :: map' wird immer sortiert. Eine 'std :: unordered_map' hat keinen festen Ordnungsbegriff. In jedem Fall macht die Partitionierung keinen Sinn. – jtbandes
@jtbandes Der Grund, warum ich dies tun möchte, ist, dass dies ein minimales Beispiel ist, wo der tatsächliche Code eine Karte als den geeigneten Container aus anderen Gründen hat. Meine Verwendung hier ist ein kleiner Teil, wo ich die Ints (Indizes), die null Vorkommen haben wollen. Ich kann umgehen mit std :: den Inhalt in einen Vektor kopieren. – acraig5075
Sie haben die Anforderung [ValueSwappable] (http://en.cppreference.com/w/cpp/concept/ValueSwappable) für die Iteratoren verpasst. – molbdnilo