Практическая работа №1 По программированию
Download 23.58 Kb.
|
Практическая работа№1
- Bu sahifa navigatsiya:
- Разнородный поиск в ассоциативных контейнерах (C++ 14)
Ассоциативные контейнерыВ ассоциативных контейнерах элементы вставляются в предварительно определенном порядке — например, с сортировкой по возрастанию. Также доступны неупорядоченные ассоциативные контейнеры. Ассоциативные контейнеры можно объединить в два подмножества: сопоставления (set) и наборы (map). Контейнер map, который иногда называют словарем, состоит из пар "ключ-значение". Ключ используется для упорядочивания последовательности, а значение связано с ключом. Например, map может содержать ключи, представляющие каждое уникальное ключевое слово в тексте, и соответствующие значения, которые обозначают количество повторений каждого слова в тексте. map — это неупорядоченная версия unordered_map. Дополнительные сведения см. в разделахmap и unordered_map . set — это контейнер уникальных элементов, упорядоченных по возрастанию. Каждое его значение также является и ключом. set — это неупорядоченная версия unordered_set. Дополнительные сведения см. в разделахset и unordered_set . Контейнеры map и set разрешают вставку только одного экземпляра ключа или элемента. Если необходимо включить несколько экземпляров элемента, следует использовать контейнер multimap или multiset. Неупорядоченные версии этих контейнеров — unordered_multimap и unordered_multiset. Дополнительные сведения см. в разделахmultimap , unordered_multimap , multiset и unordered_multiset . Упорядоченные контейнеры map и set поддерживают двунаправленные итераторы, а их неупорядоченный аналоги — итераторы с перебором в прямом направлении. Дополнительные сведения см. в разделе Итераторы. Разнородный поиск в ассоциативных контейнерах (C++ 14)Упорядоченные ассоциативные контейнеры (map, multimap, set и multiset) теперь поддерживают разнородный поиск, что означает, что вам больше не требуется передавать тот же тип объекта, что и ключ или элемент в функциях-членах, таких как find() и lower_bound(). Вы можете передать объект любого типа, для которого определен перегруженный operator<, позволяющий выполнять сравнение с типом ключа. Разнородный поиск включается дополнительно, когда указывается средство сравнения "ромбовидный функтор" std::less<> или std::greater<> при объявлении переменной контейнера, как показано ниже: std::set Если используется средство сравнения, заданное по умолчанию, контейнер ведет себя точно так же, как в C++ 11 и более ранних версиях. В следующем примере показано, как перегружать operator< , чтобы пользователи std::set могли выполнять поиск, просто передавая небольшую строку, которую можно сравнить с элементом BigObject::id каждого объекта. #include #include #include #include using namespace std; class BigObject
// Other members.... }; inline bool operator<(const string& otherId, const BigObject& obj) { return otherId < obj.id; } inline bool operator<(const BigObject& obj, const string& otherId) { return obj.id < otherId; } int main() { // Use C++14 brace-init syntax to invoke BigObject(string). // The s suffix invokes string ctor. It is a C++14 user-defined // literal defined in BigObject b1{ "42F"s }; BigObject b2{ "52F"s }; BigObject b3{ "62F"s }; set myNewSet.insert(b1); myNewSet.insert(b2); myNewSet.insert(b3); auto it = myNewSet.find(string("62F")); if (it != myNewSet.end()) cout << "myNewSet element = " << it->id << endl; else cout << "element not found " << endl; // Keep console open in debug mode: cout << endl << "Press Enter to exit."; string s; getline(cin, s); return 0; } //Output: myNewSet element = 62F Следующие функции-члены в map, multimap, set и multiset были перегружены для поддержки разнородного поиска: поиск count lower_bound upper_bound equal_range Download 23.58 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling