From 8becafcae00a1eec6f5d18db2a5bdca9ab634ba5 Mon Sep 17 00:00:00 2001 From: Paul Fd Date: Thu, 5 Mar 2020 16:38:19 +0100 Subject: [PATCH] Insert sorted into the vector, and use only const iterators in CCMap --- src/sfizz/CCMap.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/sfizz/CCMap.h b/src/sfizz/CCMap.h index 6da8da03..c025f3e3 100644 --- a/src/sfizz/CCMap.h +++ b/src/sfizz/CCMap.h @@ -61,8 +61,9 @@ public: { auto it = absl::c_find_if(container, [&](auto&& pair){ return pair.first == index; }); if (it == container.end()) { - container.emplace_back(index, defaultValue); - return container.back().second; + auto newElement = std::make_pair(index, defaultValue); + auto inserted = container.insert(absl::c_upper_bound(container, newElement, [](auto& lhs, auto& rhs) { return lhs.first < rhs.first; }), newElement); + return inserted->second; } else { return it->second; } @@ -86,11 +87,11 @@ public: { return absl::c_find_if(container, [&](auto&& pair){ return pair.first == index; }) != container.end(); } - typename std::vector>::iterator begin() { return container.begin(); } typename std::vector>::const_iterator begin() const { return container.cbegin(); } - typename std::vector>::iterator end() { return container.end(); } typename std::vector>::const_iterator end() const { return container.cend(); } private: + // typename std::vector>::iterator begin() { return container.begin(); } + // typename std::vector>::iterator end() { return container.end(); } const ValueType defaultValue; std::vector> container; LEAK_DETECTOR(CCMap);