Ways To Initialize A Set In C++ - C++ Programming Tutorial
C++ Course / STL Set & Map / Ways To Initialize A Set In C++

Ways To Initialize A Set In C++

BLUF: Mastering Ways To Initialize A Set In C++ is a critical step in becoming a proficient C++ developer. This lesson provides a deep dive into the syntax, performance considerations, and real-world applications of this concept.
Key Performance Insight: Ways To Initialize A Set In C++

C++ is renowned for its efficiency. Learn how Ways To Initialize A Set In C++ enables low-level control and high-performance computing in the tutorial below.

In C++, the 'std::set' serves as a container for storing elements. When initializing a set, you are essentially inserting elements into it. C++ offers various methods to initialize a set, enabling you to populate it from various sources or using different techniques.

Properly initiating a set is crucial for preserving its sorted characteristics. When initializing, duplicates are managed automatically. The items are sorted in ascending order depending on their values (as per a specified custom comparison function if applicable).

There are methods to initiate a set in C++, including;

  • Default Initialization: Creating a set using the default constructor.
  • Initialization with Elements: The set starts with a predefined list of elements, either using an initializer list or by copying elements from containers like arrays or vectors.
  • Copy Initialization: Constructing a set by copying elements from an existing one using the copy constructor or assignment operator.
  • Range Initialization: Initiating a set from a range of elements indicated by iterators, which can come from containers or data structures.
  • To update a set, you can utilize the function to add one or more elements: Another technique is to begin a collection by moving items from a collection in C++11 and editions to avoid duplicating them. You can also initialize a collection with a comparator function or functor to define the sorting rules.

Each of these setup techniques comes with its own syntax, benefits, and scenarios for implementation. Certain approaches are ideal for setting up a collection from the beginning, whereas others excel at appending elements to a current collection or transferring elements from different containers.

In the upcoming sections, we will delve into each of these initialization techniques extensively, offering examples and clarifications to assist you in grasping the process of initializing sets in C++ according to your particular needs.

1. Default Initialization

In C++, sets can be initiated by employing the default constructor, which generates an empty set.

Syntax:

Example

std::set<data_type> set_name;

Example:

Example

#include <set>
     #include <iostream>

     int main() {
         std::set<int> my_set; // Default initialization, creates an empty set
         
         // Check if the set is empty
         if (my_set.empty()) {
             std::cout << "The set is empty." << std::endl;
         }
         
         return 0;
     }

Output:

Output

The set is empty.

Explanation:

  • In this example, my_set is an integer set made with the default constructor.
  • If the set is empty or not, you can use the ')' function.
  • Default initialization comes in handy when you need to begin with a set and then insert elements later on.
  • 2. Initialization using Initializer List

To establish a set, you can begin by enumerating the desired elements within curly braces { }, known as an initializer list.

Syntax:

Example

set<data_type> set_name = {element1, element2, element3...};

Ensure that the items within this list are unique and organized according to their comparative values, with a focus on ascending order for data types.

Any replicated elements will be automatically eliminated upon initializing the set.

Example:

Example

#include <set>
#include <iostream>

int main() {
    std::set<int> my_set = {5, 2, 8, 1, 3, 8}; // Initializer list with duplicates

    
    for (const auto& element : my_set) {
        std::cout << element << " ";
    }
    std::cout << std::endl; 

    return 0;
}

Output:

Output

1 2 3 5 8

Explanation:

In this particular case, the collection called my_set begins with a series of repeated elements (such as multiple instances of the number '8'). Upon instantiation, the set automatically removes these duplicates and organizes the distinct values in ascending order. Leveraging initializer lists simplifies the process of initializing a set with predefined elements.

3. Initialization by Copying Elements from Another Container (e.g., Array, Vector)

Sets in C++ can be initialized by transferring elements from other containers, like arrays or vectors. This can be done through the range constructor or the range insertion method offered by the set class.

Initialization from an Array

Syntax:

Example

std::set<data_type> set_name(begin_iter, end_iter);
Example

std::set<data_type> set_name;

include <set>

include <iostream>

int main {

std::set<int> my_set; // Default initialization, creates an empty set

// Check if the set is empty

if (my_set.empty) {

std::cout << "The set is empty." << std::endl;

}

return 0;

}

Example


Example:

include <set>

include <iostream>

int main {

int arr = {5, 2, 8, 1, 3, 8}; // Array with duplicate elements

int arr_size = sizeof(arr) / sizeof(arr[0]);

// Initialize a set from the array

std::set<int> myset(arr, arr + arrsize);

for (const auto& element : my_set) {

std::cout << element << " ";

}

std::cout << std::endl;

return 0;

}

Example


Output:

1 2 3 5 8

Example


Explanation:

- In the example above, the set my_set is initialized by copying elements from the array arr.

- The range constructor takes two iterators, arr (beginning of the array) and arr + arr_size (end of the array), to specify the range of elements to be copied.

- During initialization, the set automatically removes the duplicates and sorts the remaining elements in ascending order.

Initialization from a Vector

In C++, a set named set_name can be defined by utilizing the vector container.

Syntax:

std::set<datatype> setname(vector.begin vector.end);

Example


The `vector.begin()` and `vector.end()` methods point to iterators that signify the beginning and end of the vector in C++ programming.

Example:

include <set>

include <vector>

include <iostream>

int main {

std::vector<int> vec = {5, 2, 8, 1, 3, 8}; // Vector with duplicate elements

// Initialize a set from the vector

std::set<int> my_set(vec.begin, vec.end);

for (const auto& element : my_set) {

std::cout << element << " ";

}

std::cout << std::endl;

return 0;

}

Example


Output:

1 2 3 5 8

Example


Explanation:

In this particular scenario, the my_set set is initialized by copying elements from the vec vector. The range constructor necessitates two iterators, vec.begin() to indicate the vector's beginning and vec.end() to indicate the vector's end, specifying the elements to be duplicated.

Upon initialization, the collection undergoes automatic deduplication and arranges the remaining elements in ascending order.

Creating a set by extracting elements from a different container is useful when you have a collection of items stored in an array, vector, or any other container and aim to form a set containing only the distinct elements from that assortment.

### 4. Initialization from Another Set using the Copy Constructor

In C++, sets can be created by replicating elements from an existing set through the use of the copy constructor. This specific constructor is responsible for producing a new set that holds duplicated elements from the original set.

Syntax:

std::set<datatype> newset(original_set);

Example


Example:

include <set>

include <iostream>

int main {

std::set<int> original_set = {5, 2, 8, 1, 3};

// Initialize a new set from the original set

std::set<int> newset(originalset);

for (const auto& element : new_set) {

std::cout << element << " ";

}

std::cout << std::endl;

return 0;

}

Example


Output:

1 2 3 5 8

Example


Explanation:

In this instance, the predefined set named original_set comprises preexisting integer values. By employing the copy constructor, we establish a new set named new_set that replicates the elements of original_set, preserving their order and uniqueness. When a set is instantiated from another set through the copy constructor, it produces a replica of the original set, allowing modifications to be applied to one set independently of the other.

### 5. Initialization from Another Iterable Data Structure using a Range Constructor

In C++, sets can be initialized by transferring elements from data structures such as arrays, vectors, or other containers using the range constructor. This particular constructor mandates the presence of two iterators: one indicating the beginning of the range and the other marking the end.

Syntax:

std::set<datatype> setname(begin_iter );

Example


Example:

include <set>

include <list>

include <iostream>

int main {

std::list<int> my_list = {5, 2, 8, 1, 3, 8}; // List with duplicate elements

// Initialize a set from the list

std::set<int> myset(mylist.begin, my_list.end);

for (const auto& element : my_set) {

std::cout << element << " ";

}

std::cout << std::endl;

return 0;

}

Example


Output:

1 2 3 5 8

Example


### 6. Insertion of Individual Elements

Upon establishing a set, you have the choice to append elements by employing the insert() method. This method will incorporate the element into the set unless it is already there.

Syntax:

set_name.insert(element);

Example


If the element is already within the set, invoking the insert() method will not modify it; rather, the iterator will reference the existing element.

Example:

include <set>

include <iostream>

int main {

std::set<int> my_set = {1, 3, 5};

// Insert a new element

my_set.insert(7);

// Try to insert a duplicate element

auto iter = my_set.insert(3);

if (iter. second) {

std::cout << "Element inserted successfully." << std::endl;

} else {

std::cout << "Element already exists in the set." << std::endl;

}

for (const auto& element : my_set) {

std::cout << element << " ";

}

std::cout << std::endl;

return 0;

}

Example


Output:

1 3 5 7

Example


Explanation:

In the provided scenario, we kick off by initializing my_set with the elements {1, 3, 5}. Subsequently, we introduce the number 7 to the set by employing the command my_set.insert(7). Following this, we make an attempt to include 3 using auto iter = my_set.insert(3);. As 3 is already present in the set, the insert() operation does not alter anything but returns an iterator indicating the existing element 3. The output of the insert() operation is a std::pair, comprising an iterator pointing to the inserted element (or existing element if insertion failed) and a Boolean value signifying the success of the insertion. We are now able to showcase the elements in the set, encompassing {1, 3, 5, 7}. The process of adding elements to a set becomes beneficial when you wish to integrate items into a pre-existing set, ensuring uniqueness and a maintained sorted sequence.

### 7. Insertion using Initializer List

- In addition to inserting individual elements, you can insert multiple elements at once into an existing set using an initializer list and the 'insert()' member function.

- The 'insert()' function can take an initializer list as an argument, which allows you to insert multiple elements in a single call.

Syntax:

set_name.insert({element1, element2, element3, ...});

Example


Repeated elements within the initializer list are automatically disregarded upon insertion.

Example:

include <set>

include <iostream>

int main {

std::set<int> my_set = {1, 3, 5};

// Insert multiple elements using an initializer list

my_set.insert({7, 9, 3, 11});

for (const auto& element : my_set) {

std::cout << element << " ";

}

std::cout << std::endl; //

return 0;

}

Example


Output:

1 3 5 7 9 11

Example


Explanation:

- In the above example, we first initialize my_set with the elements {1, 3, 5}.

- We then insert multiple elements {7, 9, 3, 11} into the set using an initializer list with the insert() function: my_set.insert({7, 9, 3, 11});.

- During the insertion, the duplicate element '3' is automatically discarded since it already exists in the set.

- The remaining elements, '7', '9', and '11', are inserted into the set, preserving its sorted order.

- Finally, we output the elements of the set, which now contains {1, 3, 5, 7, 9, 11}.

Adding numerous elements through an initializer list proves advantageous for incorporating a predetermined group of elements into a current set all at once, ensuring the set retains its distinctive characteristics of being sorted and containing unique elements.

Input Required

This code uses input(). Please provide values below:

Logic Practice
Install Logic Practice
Add to home screen for a faster app-like experience