diff --git a/alib2std/src/extensions/linear_set.hpp b/alib2std/src/extensions/linear_set.hpp index e3dda1d76badbfcafe8e9affe97f5496ee959f46..a3070351801c58e268634f317e0bebc8d7a08c3f 100644 --- a/alib2std/src/extensions/linear_set.hpp +++ b/alib2std/src/extensions/linear_set.hpp @@ -29,7 +29,7 @@ class linear_set { void sort_unique ( ) { std::sort ( m_data.begin ( ), m_data.end ( ), m_comp ); - m_data.resize ( std::distance ( m_data.begin ( ), std::unique ( m_data.begin ( ), m_data.end ( ), std::bind ( &linear_set<int>::eq, std::ref( * this ), std::placeholders::_1, std::placeholders::_2 ) ) ) ); + m_data.resize ( std::distance ( m_data.begin ( ), std::unique ( m_data.begin ( ), m_data.end ( ), std::bind ( &linear_set < T >::eq, std::ref( * this ), std::placeholders::_1, std::placeholders::_2 ) ) ) ); } public: @@ -136,8 +136,16 @@ public: return m_data.erase ( position ); } + size_t erase (const T& val) { + const_iterator position = lower_bound ( val ); + if ( position != end ( ) && eq ( * position, val ) ) + return m_data.erase ( position ), 1; + else + return 0; + } + iterator erase (const_iterator first, const_iterator last) { - return m_data.erace ( first, last ); + return m_data.erase ( first, last ); } const_iterator find (const T& val) const {