Практическая работа №1 По программированию


Download 23.58 Kb.
bet2/4
Sana18.06.2023
Hajmi23.58 Kb.
#1591609
TuriПрактическая работа
1   2   3   4
Bog'liq
Практическая работа№1

Ассоциативные контейнеры


В ассоциативных контейнерах элементы вставляются в предварительно определенном порядке — например, с сортировкой по возрастанию. Также доступны неупорядоченные ассоциативные контейнеры. Ассоциативные контейнеры можно объединить в два подмножества: сопоставления (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> myNewSet;
Если используется средство сравнения, заданное по умолчанию, контейнер ведет себя точно так же, как в C++ 11 и более ранних версиях.
В следующем примере показано, как перегружать operator< , чтобы пользователи std::set могли выполнять поиск, просто передавая небольшую строку, которую можно сравнить с элементом BigObject::id каждого объекта.
#include
#include
#include
#include

using namespace std;

class BigObject
{
public:
string id;
explicit BigObject(const string& s) : id(s) {}
bool operator< (const BigObject& other) const
{
return this->id < other.id;
}

// 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; // C++14
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 были перегружены для поддержки разнородного поиска:

  1. поиск

  2. count

  3. lower_bound

  4. upper_bound

  5. equal_range

Download 23.58 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling