The xtd::collections::generic namespace contains interfaces and classes that define generic collections, which allow users to create strongly typed collections that provide better type safety and performance than non-generic strongly typed collections.
Namespaces | |
| namespace | extensions |
| The xtd::extensions namespace contains interface extensions. | |
| namespace | helpers |
| The xtd::collections::generic::helpers namespace contains helpers for generic collections, sush as comparer, equator an hasher structs. | |
Classes | |
| class | comparer |
| Provides a base class for implementations of the xtd::collections::generic::icomparer <type_t> generic interface. More... | |
| class | dictionary |
| Represents a collection of keys and values. More... | |
| class | empty_comparer |
| Provides an empty comparer class. More... | |
| class | enumerable_generator |
| Represents an enumerable enumerable_generator. More... | |
| struct | enumerator |
| Supports a simple iteration over a generic collection. More... | |
| struct | enumerator<> |
| Supports a simple iteration over a generic collection. More... | |
| class | equality_comparer |
| Provides a base class for implementations of the xtd::collections::generic::iequality_comparer <type_t> generic interface. More... | |
| class | hash_set |
| Represents a set of values. More... | |
| class | icomparer |
| Exposes a method that compares two objects. More... | |
| class | idictionary |
| Represents a generic collection of key/value pairs. More... | |
| class | ienumerable |
| Exposes the enumerator, which supports a simple iteration over a collection of a specified type. More... | |
| class | ienumerable_abstract |
| Abstract object that represent ienumerable. More... | |
| class | ienumerator |
| Supports a simple iteration over a generic collection. More... | |
| class | iequality_comparer |
| Defines methods to support the comparison of objects for equality. More... | |
| class | iset |
| Provides the base interface for the abstraction of sets. More... | |
| class | key_not_found_exception |
| The exception that is thrown when the key specified for accessing an element in a collection does not match any key in the collection. More... | |
| struct | key_value_pair |
| Defines a key/value pair that can be set or retrieved. More... | |
| struct | key_value_pair< > |
| Defines a key/value pair that can be set or retrieved. More... | |
| class | linked_list |
| Represents a doubly linked list. More... | |
| class | linked_list_node |
| Represents a node in a LinkedList<T>. This class cannot be inherited. More... | |
| class | list |
| Represents a strongly typed list of objects that can be accessed by index. Provides methods to search, sort, and manipulate lists. More... | |
| class | ordered_dictionary |
| Represents a collection of key/value pairs that are accessible by the key or index. More... | |
| class | queue |
| Represents a first-in, first-out collection of objects. More... | |
| class | stack |
| Represents a variable size last-in-first-out (LIFO) collection of instances of the same specified type. More... | |
Alias | |
| template<xtd::collections::generic::enumerable enumerable_type> | |
| using | enumerable_value_type |
| Represents the enumerable value type. | |
| template<class key_t, class value_t, class lesser_t = helpers::lesser<key_t>, class allocator_t = helpers::allocator<std::pair<const key_t, value_t >>> | |
| using | sorted_dictionary |
| Represents a collection of key/value pairs that are sorted on the key. | |
| template<class key_t, class value_t, class allocator_t = helpers::allocator<std::pair<const key_t, value_t>>> | |
| using | sorted_list |
| Represents a collection of key/value pairs that are sorted by the keys and are accessible by key and by index. | |
| template<class type_t, class lesser_t = xtd::collections::generic::helpers::lesser<type_t>, class allocator_t = xtd::collections::generic::helpers::allocator<type_t >> | |
| using | sorted_set |
| Represents a collection of objects that is maintained in sorted order. | |
Public Aliases | |
Defines methods to manipulate generic collections.
The box_collection class implements the xtd::collections::generic::icollection::contains method to use the default equality to determine whether a box is in the collection. This method is used by the xtd::collections::generic::icollection::add method so that each box added to the collection has a unique set of dimensions. The box_collection class also provides an overload of the xtd::collections::generic::icollection::contains method that takes a specified xtd::collections::generic::iequality_comparer <type_t> interface, such as box_same_dimensions and box_same_volume` classes in the example. This example also implements an xtd::collections::generic::ienumerator <type_t> interface for the box_collection class so that the collection can be enumerated. #include <xtd/xtd>
class program {
public:
static auto main() -> void {
auto boxes = box_collection {};
boxes.add(program::box {10, 4, 6});
boxes.add(program::box {4, 6, 10});
boxes.add(program::box {6, 10, 4});
boxes.add(program::box {12, 8, 10});
// Same dimensions. Cannot be added:
boxes.add(program::box {10, 4, 6});
// Test the Remove method.
display(boxes);
console::write_line("Removing 6x10x4");
boxes.remove(program::box {6, 10, 4});
display(boxes);
// Test the Contains method.
auto box_check = program::box {8, 12, 10};
console::write_line("Contains {}x{}x{} by dimensions: {}", box_check.height, box_check.length, box_check.width, boxes.contains(box_check));
// Test the Contains method overload with a specified equality comparer.
console::write_line("Contains {}x{}x{} by volume: {}", box_check.height, box_check.length, box_check.width, boxes.contains(box_check, box_same_volume {}));
}
struct box : public object, public iequatable<program::box> {
// Public Constructors :
box() = default;
// Public Properties :
int height = 0;
int length = 0;
int width = 0;
// Public Methods :
bool equals(const object& o) const noexcept override {return is<program::box>(o) && equals(as<program::box>(o));}
bool equals(const program::box& o) const noexcept override {return box_same_dimensions {}.equals(*this, o);}
};
public:
// Public Constructors :
box_collection(const std::initializer_list<program::box>& boxes) : boxes_(boxes) {}
// Public Properties :
// Public Methods :
if (!contains(item))
boxes_.add(item);
else
console::write_line("A box with {}x{}x{} dimensions was already added to the collection.", item.height, item.length, item.width);
}
bool contains(const program::box& item, const iequality_comparer<program::box>& comparer) const noexcept {
for (auto box : boxes_)
return false;
}
void copy_to(array<program::box>& array, xtd::size array_index) const override {boxes_.copy_to(array, array_index);}
enumerator<program::box> get_enumerator() const override {return {new_ptr<box_enumerator>(boxes_)};}
private:
list<program::box> boxes_;
object sync_root_;
};
public:
// Public Constructors :
explicit box_enumerator(const list<program::box>& items) : items_(items) {}
// Public Properties :
// Public Methods :
bool move_next() override {return ++index_ < items_.count();}
void reset() override {index_ = size_object::max_value;}
protected:
const list<program::box>& items_;
size index_ = size_object::max_value;
};
// Defines two boxes as equal if they have the same dimensions.
public:
// Public Methods :
bool equals(const program::box& b1, const program::box& b2) const noexcept override {return b1.height == b2.height && b1.length == b2.length && b1.width == b2.width;}
size get_hash_code(const program::box& box) const noexcept override {return hash_code::combine(box.height, box.length, box.width);}
};
// Defines two boxes as equal if they have the same volume.
public:
// Public Methods :
bool equals(const program::box& b1, const program::box& b2) const noexcept override {return b1.height * b1.length * b1.width == b2.height * b2.length * b2.width;}
auto hash_code = hash_code::combine(box.height, box.length, box.width);
console::write_line("HC: {}", hash_code);
return hash_code;
}
};
console::write_line("\nheight length width hash code");
for (auto box : boxes)
console::write_line("{,-6} {,-6} {,-6} {}", box.height, box.length, box.width, box.get_hash_code());
// Results by manipulating the enumerator directly:
//auto enumerator = boxes.get_enumerator();
//console::write_line("\nheight length width hash code");
//while (enumerator.move_next()) {
// auto b = enumerator.current();
// console::write_line("{,-6} {,-6} {,-6} {}", b.height, b.length, b.width, b.get_hash_code());
//}
}
};
startup_(program::main);
// This code can produce the following output :
//
// A box with 10x4x6 dimensions was already added to the collection.
//
// height length width hash code
// 10 4 6 215240349697
// 4 6 10 215240349697
// 6 10 4 215240349697
// 12 8 10 215240349697
//
// Removing 6x10x4
//
// height length width hash code
// 10 4 6 215240349697
// 4 6 10 215240349697
// 12 8 10 215240349697
//
// Contains 8x12x10 by dimensions: false
// Contains 8x12x10 by volume: true
static void write_line() Writes the current line terminator to the standard output stream using the specified format informati... virtual bool equals(const object &obj) const noexcept Determines whether the specified object is equal to the current object. xtd::collections::generic::comparer< xtd::any_object > comparer Exposes a method that compares two objects. Definition comparer.hpp:25 generic::ienumerator< xtd::any_object > ienumerator Supports a simple iteration over a non-generic collection. Definition ienumerator.hpp:38 generic::iequality_comparer< xtd::any_object > iequality_comparer Defines methods to support the comparison of objects for equality. Definition iequality_comparer.hpp:29 #define startup_(main_method) Defines the entry point to be called when the application loads. Generally this is set either to the ... Definition startup.hpp:284 @ current Specifies the current position within a stream. Definition seek_origin.hpp:20 @ display Specifies 1/75 inch as the unit of measure. Definition graphics_unit.hpp:21 @ height Specifies that the height of the control is defined. Definition bounds_specified.hpp:34 @ width Specifies that the width of the control is defined. Definition bounds_specified.hpp:32 virtual auto remove(const type_t &item) -> bool=0 Removes the first occurrence of a specific object from the xtd::collections::generic::icollection <ty... virtual auto sync_root() const noexcept -> const xtd::object &=0 Gets an object that can be used to synchronize access to the the xtd::collections::generic::icollecti... virtual auto contains(const type_t &item) const noexcept -> bool=0 Determines whether the xtd::collections::generic::icollection <type_t> contains a specific value. virtual auto copy_to(xtd::array< type_t > &array, xtd::size array_index) const -> void=0 Copies the elements of the xtd::collections::generic::icollection <type_t> to an xtd::array,... virtual auto add(const type_t &item) -> void=0 Adds an item to the xtd::collections::generic::icollection <type_t>. virtual auto is_synchronized() const noexcept -> bool=0 Gets a value indicating whether access to the xtd::collections::generic::icollection <type_t> is sync... virtual auto clear() -> void=0 Removes all items from the xtd::collections::generic::icollection <type_t>. virtual auto is_read_only() const noexcept -> bool=0 Gets a value indicating whether the xtd::collections::generic::icollection <type_t> is read-only. virtual auto count() const noexcept -> xtd::size=0 Gets the number of elements contained in the xtd::collections::generic::icollection <type_t>. bool equals(const object &obj) const noexcept override Determines whether the specified object is equal to the current object. Definition read_only_span.hpp:272 constexpr size_type length() const noexcept Returns the length of the current read_only_span. Definition read_only_span.hpp:229 xtd::size get_hash_code() const noexcept override Serves as a hash function for a particular type. Definition read_only_span.hpp:296
/** Represents the xtd::collections::generic::icollection value type. | |
| using | value_type |
Public Fields | |
Represents a collection of objects that can be individually accessed by index.
The box_collection class implements the xtd::collections::generic::ibox::index_of method to use the default equality to determine whether a box is in the collection. This method is used by the xtd::collections::generic::icollection::add method so that each box added to the collection has a unique set of dimensions. The box_collection class also provides an overload of the xtd::collections::generic::icollection::contains method that takes a specified xtd::collections::generic::iequality_comparer <type_t> interface, such as box_same_dimensions and box_same_volume` classes in the example. This example also implements an xtd::collections::generic::ienumerator <type_t> interface for the box_collection class so that the collection can be enumerated. #include <xtd/xtd>
class program {
public:
static auto main() -> void {
auto boxes = box_collection {};
boxes.add(program::box {10, 4, 6});
boxes.add(program::box {4, 6, 10});
boxes.add(program::box {6, 10, 4});
boxes.add(program::box {12, 8, 10});
// Same dimensions. Cannot be added:
boxes.add(program::box {10, 4, 6});
// Test the Remove method.
display(boxes);
console::write_line("Removing 6x10x4");
boxes.remove(program::box {6, 10, 4});
display(boxes);
// Test the Contains method.
auto box_check = program::box {8, 12, 10};
console::write_line("Contains {}x{}x{} by dimensions: {}", box_check.height, box_check.length, box_check.width, boxes.contains(box_check));
// Test the Contains method overload with a specified equality comparer.
console::write_line("Contains {}x{}x{} by volume: {}", box_check.height, box_check.length, box_check.width, boxes.contains(box_check, box_same_volume {}));
}
struct box : public object, public iequatable<program::box> {
// Public Constructors :
box() = default;
// Public Properties :
int height = 0;
int length = 0;
int width = 0;
// Public Methods :
bool equals(const object& o) const noexcept override {return is<program::box>(o) && equals(as<program::box>(o));}
bool equals(const program::box& o) const noexcept override {return box_same_dimensions {}.equals(*this, o);}
};
public:
// Public Constructors :
box_collection(const std::initializer_list<program::box>& boxes) : boxes_(boxes) {}
// Public Properties :
// Public Methods :
if (!contains(item))
boxes_.add(item);
else
console::write_line("A box with {}x{}x{} dimensions was already added to the collection.", item.height, item.length, item.width);
}
bool contains(const program::box& item, const iequality_comparer<program::box>& comparer) const noexcept {
for (auto box : boxes_)
return false;
}
void copy_to(array<program::box>& array, xtd::size array_index) const override {boxes_.copy_to(array, array_index);}
enumerator<program::box> get_enumerator() const override {return {new_ptr<box_enumerator>(boxes_)};}
if (boxes_[index] == item) return index;
return npos;
}
boxes_.insert(index, item);
}
boxes_.remove_at(index);
}
// Public Operators :
return boxes_[index];
}
program::box& operator [](xtd::size index) override {
return boxes_[index];
}
private:
list<program::box> boxes_;
object sync_root_;
};
public:
// Public Constructors :
explicit box_enumerator(const list<program::box>& items) : items_(items) {}
// Public Properties :
// Public Methods :
bool move_next() override {return ++index_ < items_.count();}
void reset() override {index_ = size_object::max_value;}
protected:
const list<program::box>& items_;
size index_ = size_object::max_value;
};
// Defines two boxes as equal if they have the same dimensions.
public:
// Public Methods :
bool equals(const program::box& b1, const program::box& b2) const noexcept override {return b1.height == b2.height && b1.length == b2.length && b1.width == b2.width;}
size get_hash_code(const program::box& box) const noexcept override {return hash_code::combine(box.height, box.length, box.width);}
};
// Defines two boxes as equal if they have the same volume.
public:
// Public Methods :
bool equals(const program::box& b1, const program::box& b2) const noexcept override {return b1.height * b1.length * b1.width == b2.height * b2.length * b2.width;}
auto hash_code = hash_code::combine(box.height, box.length, box.width);
console::write_line("HC: {}", hash_code);
return hash_code;
}
};
console::write_line("\nheight length width hash code");
for (auto index = 0_z; index < boxes.count(); ++index)
console::write_line("{,-6} {,-6} {,-6} {}", boxes[index].height, boxes[index].length, boxes[index].width, boxes[index].get_hash_code());
// Results by manipulating the iterator directly:
//console::write_line("\nheight length width hash code");
//for (auto box : boxes)
// console::write_line("{,-6} {,-6} {,-6} {}", box.height, box.length, box.width, box.get_hash_code());
// Results by manipulating the enumerator directly:
//auto enumerator = boxes.get_enumerator();
//console::write_line("\nheight length width hash code");
//while (enumerator.move_next()) {
// auto b = enumerator.current();
// console::write_line("{,-6} {,-6} {,-6} {}", b.height, b.length, b.width, b.get_hash_code());
//}
}
};
startup_(program::main);
// This code can produce the following output :
//
// A box with 10x4x6 dimensions was already added to the collection.
//
// height length width hash code
// 10 4 6 215240349697
// 4 6 10 215240349697
// 6 10 4 215240349697
// 12 8 10 215240349697
//
// Removing 6x10x4
//
// height length width hash code
// 10 4 6 215240349697
// 4 6 10 215240349697
// 12 8 10 215240349697
//
// Contains 8x12x10 by dimensions: false
// Contains 8x12x10 by volume: true
constexpr xtd::size npos Represents a value that is not a valid position in a collection. Definition npos.hpp:26 virtual auto index_of(const type_t &item) const noexcept -> xtd::size=0 Determines the index of a specific item in the xtd::collections::generic::ilist <type_t>. virtual auto remove_at(xtd::size index) -> void=0 Removes the xtd::collections::generic::ilist <type_t> item at the specified index. virtual auto insert(xtd::size index, const type_t &item) -> void=0 Inserts an item to the xtd::collections::generic::ilist <type_t> at the specified index. virtual auto is_fixed_size() const noexcept -> bool=0 Gets a value indicating whether the xtd::collections::generic::ilist <type_t> has a fixed size.
/** Represents a value that is not a valid position in a collection.
| |
| static constexpr xtd::size | npos |
| static constexpr xtd::size | bpos |
| Represents the index of the first valid element in a collection. | |
| static constexpr xtd::size | epos |
| Represents the index of the last valid element in a collection. | |
Public Properties | |
| virtual auto | count () const noexcept -> xtd::size=0 |
| Gets the number of elements contained in the xtd::collections::generic::icollection <type_t>. | |
| virtual auto | is_read_only () const noexcept -> bool=0 |
| Gets a value indicating whether the xtd::collections::generic::icollection <type_t> is read-only. | |
| virtual auto | is_synchronized () const noexcept -> bool=0 |
| Gets a value indicating whether access to the xtd::collections::generic::icollection <type_t> is synchronized (thread safe). | |
| virtual auto | sync_root () const noexcept -> const xtd::object &=0 |
| Gets an object that can be used to synchronize access to the the xtd::collections::generic::icollection <type_t>. | |
| virtual auto | is_fixed_size () const noexcept -> bool=0 |
| Gets a value indicating whether the xtd::collections::generic::ilist <type_t> has a fixed size. | |
Public Methods | |
| virtual auto | add (const type_t &item) -> void=0 |
| Adds an item to the xtd::collections::generic::icollection <type_t>. | |
| virtual auto | clear () -> void=0 |
| Removes all items from the xtd::collections::generic::icollection <type_t>. | |
| virtual auto | contains (const type_t &item) const noexcept -> bool=0 |
| Determines whether the xtd::collections::generic::icollection <type_t> contains a specific value. | |
| virtual auto | copy_to (xtd::array< type_t > &array, xtd::size array_index) const -> void=0 |
| Copies the elements of the xtd::collections::generic::icollection <type_t> to an xtd::array, starting at a particular xtd::array index. | |
| virtual auto | remove (const type_t &item) -> bool=0 |
| Removes the first occurrence of a specific object from the xtd::collections::generic::icollection <type_t>. | |
| virtual auto | index_of (const type_t &item) const noexcept -> xtd::size=0 |
| Determines the index of a specific item in the xtd::collections::generic::ilist <type_t>. | |
| virtual auto | insert (xtd::size index, const type_t &item) -> void=0 |
| Inserts an item to the xtd::collections::generic::ilist <type_t> at the specified index. | |
| virtual auto | remove_at (xtd::size index) -> void=0 |
| Removes the xtd::collections::generic::ilist <type_t> item at the specified index. | |
Public Operators | |
| virtual auto | operator[] (xtd::size index) const -> const type_t &=0 |
| Gets the element at the specified index. | |
|
nodiscardpure virtualnoexcept |
Gets the number of elements contained in the xtd::collections::generic::icollection <type_t>.
|
nodiscardpure virtualnoexcept |
Gets a value indicating whether the xtd::collections::generic::icollection <type_t> is read-only.
|
nodiscardpure virtualnoexcept |
Gets a value indicating whether access to the xtd::collections::generic::icollection <type_t> is synchronized (thread safe).
|
nodiscardpure virtualnoexcept |
Gets an object that can be used to synchronize access to the the xtd::collections::generic::icollection <type_t>.
|
pure virtual |
Adds an item to the xtd::collections::generic::icollection <type_t>.
| item | The object to add to the xtd::collections::generic::icollection <type_t>. |
| xtd::not_supported_exception | The xtd::collections::generic::icollection <type_t> is read-only. |
|
pure virtual |
Removes all items from the xtd::collections::generic::icollection <type_t>.
| xtd::not_supported_exception | The xtd::collections::generic::icollection <type_t> is read-only. |
|
nodiscardpure virtualnoexcept |
Determines whether the xtd::collections::generic::icollection <type_t> contains a specific value.
| item | The object to locate in the xtd::collections::generic::icollection <type_t>. |
|
pure virtual |
Copies the elements of the xtd::collections::generic::icollection <type_t> to an xtd::array, starting at a particular xtd::array index.
| array | The one-dimensional xtd::array that is the destination of the elements copied from xtd::collections::generic::icollection <type_t>. The xtd::array must have zero-based indexing. |
| array_index | The zero-based index in array at which copying begins. |
| xtd::argument_exception | The number of elements in the source xtd::collections::generic::icollection <type_t> is greater than the available space from `array_index` to the end of the destination `array`. |
|
pure virtual |
Removes the first occurrence of a specific object from the xtd::collections::generic::icollection <type_t>.
| item | The object to remove from the xtd::collections::generic::icollection <type_t>. |
| xtd::not_supported_exception | The xtd::collections::generic::icollection <type_t> is read-only. |
|
pure virtualnoexcept |
Gets a value indicating whether the xtd::collections::generic::ilist <type_t> has a fixed size.
|
nodiscardpure virtualnoexcept |
Determines the index of a specific item in the xtd::collections::generic::ilist <type_t>.
| item | The object to locate in the xtd::collections::generic::ilist <type_t>. |
|
pure virtual |
Inserts an item to the xtd::collections::generic::ilist <type_t> at the specified index.
| index | The zero-based index at which item should be inserted. |
| item | The object to insert into the xtd::collections::generic::ilist <type_t>. |
| xtd::argument_out_of_range_exception | `index` is not a valid index in the xtd::collections::generic::ilist <type_t>. |
| xtd::not_supported_exception | The xtd::collections::generic::ilist <type_t> is read-only. |
|
pure virtual |
Removes the xtd::collections::generic::ilist <type_t> item at the specified index.
| index | The zero-based index of the item to remove. |
| xtd::argument_out_of_range_exception | `index` is not a valid index in the xtd::collections::generic::ilist <type_t>. |
| xtd::not_supported_exception | The xtd::collections::generic::ilist <type_t> is read-only. |
|
pure virtual |
Gets the element at the specified index.
Sets the element at the specified index.
| index | The zero-based index of the element to get. |
| index | The zero-based index of the element to set. |
|
inlinestaticconstexpr |
Represents the index of the first valid element in a collection.
|
inlinestaticconstexpr |
Represents the index of the last valid element in a collection.