Więc mam 2 std::map
s <string, shared_ptr<file> >
jeden jest "stary" to "nowy" Chcę uzyskać jakie pliki zostały usunięte i mogą być w stanie przerobić różnice i zrobić kilka rzeczy dla shared_ptr. Czy jest coś takiego i jak to zrobić?Jak odjąć jedną listę kluczy map od innej i uzyskać nową mapę (mapa A - mab B = mapa C)
Odpowiedz
Mimo że napisanie tego samemu jest łatwe (powtórzenie ponad A
i sprawdzenie, czy klucz jest obecny w B
), wygląda to na zadanie dla std::set_difference
. Musimy lambda lub jakąś niestandardową orzecznik porównać klucze, ale:
#include <iterator>
#include <map>
#include <string>
#include <algorithm>
typedef std::map<std::string, MyPtr> my_map;
my_map A; // given
my_map B; // given
void make_a_difference()
{
my_map C; // will hold the result
std::set_difference(A.begin(), A.end(),
B.begin(), B.end(),
std::insert_iterator<my_map>(C, C.end()),
[](const my_map::value_type & a, const my_map::value_type & b)
{ return a.first < b.first; }
);
}
Jeśli chcesz napisać to samemu, należy wziąć pod uwagę korzystając z faktu, że oba zakresy są już posortowane, więc można zrobić lepsze niż płaskie poszukiwania istnienia poprzez równoległe przesuwanie dwóch iteratorów.
Jeśli nie masz C++ 11, wystarczy użyć tego predykatu zamiast lambda:
bool my_comp(const my_map::value_type & a, const my_map::value_type & b)
{
return a.first < b.first;
}
Strzeż, że nie ma porównania na wyznaczonej typu! Więc jeśli posiadasz ten sam klucz ciągu na obu mapach, nie będzie takiej pozycji w wyniku, nawet jeśli dwie odwzorowane wartości różnią się. Jeśli jest to niepożądane, potrzebny jest inny kontener wyjściowy (na przykład std::multimap<my_map::key_type, my_map::mapped_type>
) i inny predykat.
- 1. Mapa dwie listy w jedną listę słowników
- 2. Mapa mutex C++ 11
- 3. Konwersja Java Mapa Scala Mapa
- 4. Mapa funkcji C++
- 5. Rcpp mapa/słownik/lista
- 6. ng-mapa pokazuje mapę częściowe w HTML
- 7. Mapa java z duplikatami kluczy
- 8. Klikalna mapa obrazu C#
- 9. C# Array Mapa/Zbierz
- 10. Znaczenie podkreślenia w podnośniku [A, B] (f: A => B): Opcja [A] => Opcja [B] = _ mapa f
- 11. Mapa STL na siebie?
- 12. Fluent NHibernate - Mapa listę ciągów
- 13. świat mapę - mapa połówki krajów do różnych kolorach
- 14. Jak poprawnie leniwy zainicjować Mapa mapy?
- 15. Mapa STL do generycznego wektora C++
- 16. Scala Mapa konwersja
- 17. mapa wektorów w STL?
- 18. std :: ruch i mapa przypisanie
- 19. Scala Mapa foreach
- 20. Ulotka Pusta mapa
- 21. JAXB marshaling Mapa list
- 22. Scala: zamapuj mapę na listę krotek
- 23. Mapa Wartości w Collectors.groupingBy()
- 24. Hazelcast mapa jest zablokowana
- 25. Jak odjąć od wartości słowników
- 26. Strumienie Java: grupuj listę w mapę map
- 27. Mapa Mathematica North America
- 28. Dostęp wartość mapa indeksem
- 29. Kątowy odpowiednik jQuery $ .mapa?
- 30. Mapa pamięci obiektów klasy C++
Spójrz na '' 'std :: set_difference'''. –