@@ -66,15 +66,40 @@ class BlotMapVector {
66
66
return Vector[Pair.first ->second ].getValue ().second ;
67
67
}
68
68
69
- std::pair<iterator, bool > insert (const std::pair<KeyT, ValueT> &InsertPair) {
70
- auto Pair = Map.insert (std::make_pair (InsertPair.first , size_t (0 )));
71
- if (Pair.second ) {
72
- size_t Num = Vector.size ();
73
- Pair.first ->second = Num;
74
- Vector.push_back (InsertPair);
75
- return std::make_pair (Vector.begin () + Num, true );
69
+ template <typename ... Ts>
70
+ std::pair<iterator, bool > try_emplace (KeyT &&Key, Ts &&... Args) {
71
+ auto Pair = Map.insert (std::make_pair (std::move (Key), size_t (0 )));
72
+ if (!Pair.second ) {
73
+ return std::make_pair (Vector.begin () + Pair.first ->second , false );
74
+ }
75
+
76
+ size_t Num = Vector.size ();
77
+ Pair.first ->second = Num;
78
+ Vector.emplace_back (
79
+ std::make_pair (Pair.first ->first , ValueT (std::forward<Ts>(Args)...)));
80
+ return std::make_pair (Vector.begin () + Num, true );
81
+ }
82
+
83
+ template <typename ... Ts>
84
+ std::pair<iterator, bool > try_emplace (const KeyT &Key, Ts &&... Args) {
85
+ auto Pair = Map.insert (std::make_pair (std::move (Key), size_t (0 )));
86
+ if (!Pair.second ) {
87
+ return std::make_pair (Vector.begin () + Pair.first ->second , false );
76
88
}
77
- return std::make_pair (Vector.begin () + Pair.first ->second , false );
89
+
90
+ size_t Num = Vector.size ();
91
+ Pair.first ->second = Num;
92
+ Vector.emplace_back (
93
+ std::make_pair (Pair.first ->first , ValueT (std::forward<Ts>(Args)...)));
94
+ return std::make_pair (Vector.begin () + Num, true );
95
+ }
96
+
97
+ std::pair<iterator, bool > insert (std::pair<KeyT, ValueT> &InsertPair) {
98
+ return try_emplace (InsertPair.first , InsertPair.second );
99
+ }
100
+
101
+ std::pair<iterator, bool > insert (const std::pair<KeyT, ValueT> &InsertPair) {
102
+ return try_emplace (InsertPair.first , InsertPair.second );
78
103
}
79
104
80
105
iterator find (const KeyT &Key) {
0 commit comments