[odb-users] Change-tracking map, list and set containers

ALAIN MARI alain.mari at se.com
Tue Jan 15 11:35:27 EST 2019

Actually, we have big maps (up to 1 million elements) in which we make lots of lookups.
So it is mandatory to have sorted vector (persistent) to mimic the map behavior.

Unfortunately, when I want to apply standard algorithm std::sort, on odb::vector, compilation fails with this message :

1>c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.16.27023\include\algorithm(3835): error C3892: '_First': you cannot assign to a variable that is const
1>c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.16.27023\include\algorithm(4023): note: see reference to function template instantiation '_BidIt std::_Insertion_sort_unchecked<_RanIt,_Pr>(_BidIt,const _BidIt,_Pr)' being compiled
1>        with
1>        [
1>            _BidIt=odb::vector_iterator<odb::vector<int,std::allocator<int>>,std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>>,
1>            _RanIt=odb::vector_iterator<odb::vector<int,std::allocator<int>>,std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>>,
1>            _Pr=std::less<void>
1>        ]

-----Message d'origine-----
De : Boris Kolpackov [mailto:boris at codesynthesis.com] 
Envoyé : mardi 15 janvier 2019 15:04
À : ALAIN MARI <alain.mari at se.com>
Cc : odb-users at codesynthesis.com
Objet : Re: [odb-users] Change-tracking map, list and set containers

[External email: Use caution with links and attachments]


ALAIN MARI <alain.mari at se.com> writes:

> Sometimes, maps can be advantageously replaced by sorted vectors.

True. Or even unsorted (if you normally have just a handful of elements, linear search over an unsorted vector can be faster that map lookup due to data locality).

> Besides, I will try to maintain a vector/map in parallel in some of 
> our persistent objects but I'm afraid of memory consumption in that 
> case.

You can always get clever and maintain a pointer to the map's element in the vector or some such. It will require a bit of extra mapping effort for ODB, but otherwise should be doable.

> I will also look inside your odb::vector implementation to get a sense 
> of the complexity, and to see I we can adapt it to std::list.

Yes, I think std::list we can handle using odb::vector's implementation (vector_impl); off the top of my head I don't see any good reasons to replicate the list's storage model for the change state.

This email has been scanned by the Symantec Email Security.cloud service.

More information about the odb-users mailing list