RFC: where to put sorted vector template/class?

Philipp Riemer ruderphilipp at gmail.com
Tue Jul 10 09:42:56 PDT 2012


2012/7/10 Noel Grandin <noel at peralex.com>:
> On 2012-07-10 15:35, Caolán McNamara wrote:
> How does this look? It's the bare minimum I need in a sorted_vector class.
>
> namespace o3tl
> {
> /** Represents a sorted vector of values.
>
>     @tpl Value
>     @tpl Compare comparison method
> */
> template <class Value, class Compare = less<Value>>
> class sorted_vector : vector<Value>
> {
> public:
>
>     // MODIFIERS
>     pair<iterator,bool> insert( const Value& x );
>     size_type           erase( const Value& x );
>
>     // OPERATIONS
>     /* Searches the container for an element with a value of x
>      * and returns an iterator to it if found, otherwise it returns an
>      * iterator to sorted_vector::end (the element past the end of the
> container).
>      */
>     iterator            find( const Value& x ) const;
>
> };
>
>
>
> // IMPLEMENTATION
>
> template <class Value, class Compare>
> pair<iterator,bool> sorted_vector<Value,Compare>::insert( const Value& x )
> {
>     iterator it = std::lower_bound(begin(), end(), p, Compare);
>     if( !Compare(*it, x) )
>     {
>         return make_pair( it, false );
>     }
>     it = insert( it, p );
>     return make_pair( it, true );
> }
>
> template <class Value, class Compare>
> size_type sorted_vector<Value,Compare>::erase( const Value& x )
> {
>     iterator it = std::lower_bound(begin(), end(), p, Compare);
>     if( !Compare(*it, x) )
>     {
>         erase( it );
>         return 1;
>     }
>     return 0;
> }
>
> template <class Value, class Compare>
> iterator sorted_vector<Value,Compare>::find( const Value& x )
> {
>     iterator it = std::lower_bound(begin(), end(), p, Compare);
>     if( !Compare(*it, x) )
>     {
>         return it;
>     }
>     return end();
> }
>

Maybe a stupid question and more (clean) code related: Why do you
duplicate the "search if already included" instead of using the ::find
method in ::insert? I mean, sure, at the moment it is just two
lines... but most of the stuff in this code base started that small
and are now big evil monsters ;-) But maybe I am too pessimistic in
this point...

Cheers,
Philipp


More information about the LibreOffice mailing list