diff options
| author | robot-piglet <[email protected]> | 2026-01-15 21:35:25 +0300 |
|---|---|---|
| committer | robot-piglet <[email protected]> | 2026-01-15 22:18:26 +0300 |
| commit | a85eefc56f18859a643c4c99c6a6d86c7ffd1fdf (patch) | |
| tree | 0e15e3bc7ea3f8a543211205f8690c43409dc8d6 /library/cpp/containers | |
| parent | a8b9e17093c6581a74c9c8b985b8c871056233f1 (diff) | |
Intermediate changes
commit_hash:9269fba6accab3db16a0bf72a8ca256583d95e72
Diffstat (limited to 'library/cpp/containers')
| -rw-r--r-- | library/cpp/containers/ordered_map/ordered_map.h | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/library/cpp/containers/ordered_map/ordered_map.h b/library/cpp/containers/ordered_map/ordered_map.h index 801a526217f..22422901a84 100644 --- a/library/cpp/containers/ordered_map/ordered_map.h +++ b/library/cpp/containers/ordered_map/ordered_map.h @@ -14,6 +14,7 @@ namespace NOrderedMap { struct TPairTraits { using TValue = Value; using Item = std::pair<const Key, Value>; + using StorageItem = Item; using TMutableItem = std::pair<Key, Value>; static const Key& GetSortProjector(const Item& x) { @@ -29,6 +30,7 @@ namespace NOrderedMap { template<class Key> struct TSelfTraits { using Item = const Key; + using StorageItem = Key; using TMutableItem = Key; using TValue = Item; @@ -44,12 +46,13 @@ namespace NOrderedMap { template < class TKey, class Traits, - class BaseToUse = std::list<typename Traits::Item> //bases: deque or list + class BaseToUse = std::list<typename Traits::StorageItem> //bases: deque or list > class TOrderedMapImpl : protected BaseToUse { using TBase = BaseToUse; public: + using TTraits = Traits; using typename TBase::const_iterator; using typename TBase::iterator; using typename TBase::reference; @@ -62,6 +65,7 @@ namespace NOrderedMap { using TBase::end; using TBase::rbegin; using TBase::rend; + operator bool() const { return empty(); } @@ -164,6 +168,11 @@ namespace NOrderedMap { } template <class... TArgs> + reference emplace(TArgs&&... args) { + return emplace_back(std::forward<TArgs>(args)...); + } + + template <class... TArgs> reference try_emplace_back(TArgs&&... args) { auto& value = TBase::emplace_back(std::forward<TArgs>(args)...); auto [mapIt, ok] = Map_.try_emplace(&Traits::GetSortProjector(value), --TBase::end()); @@ -276,5 +285,9 @@ namespace NOrderedMap { template <class TKey> class TOrderedSet : public TOrderedMapImpl<TKey, TSelfTraits<TKey>> { + public: + auto operator==(const TOrderedSet& b) const { + return std::lexicographical_compare_three_way(this->begin(), this->end(), b.begin(), b.end()) == std::strong_ordering::equal; + } }; } |
