Fixed map iterator
This commit is contained in:
Binary file not shown.
@ -20,7 +20,7 @@
|
||||
|
||||
namespace ia
|
||||
{
|
||||
// [IATODO: IMPL] (Allocator must be fore _value_type, not ListEntry<_value_type>)
|
||||
// [IATODO: IMPL] (Allocator must be for _value_type, not ListEntry<_value_type>)
|
||||
template<typename _value_type>
|
||||
class ListEntry;
|
||||
|
||||
|
||||
@ -36,10 +36,10 @@ namespace ia
|
||||
using key_type = _key_type;
|
||||
using value_type = _value_type;
|
||||
using allocator_type = _allocator_type;
|
||||
using iterator = Vector<ListEntry<KeyValuePair>*>::iterator;
|
||||
using const_iterator = Vector<ListEntry<KeyValuePair>*>::const_iterator;
|
||||
using reverse_iterator = Vector<ListEntry<KeyValuePair>*>::reverse_iterator;
|
||||
using reverse_const_iterator = Vector<ListEntry<KeyValuePair>*>::reverse_const_iterator;
|
||||
using iterator = Vector<KeyValuePair*>::iterator;
|
||||
using const_iterator = Vector<KeyValuePair*>::const_iterator;
|
||||
using reverse_iterator = Vector<KeyValuePair*>::reverse_iterator;
|
||||
using reverse_const_iterator = Vector<KeyValuePair*>::reverse_const_iterator;
|
||||
|
||||
STATIC CONSTEXPR size_type alignment = _alignment;
|
||||
|
||||
@ -57,7 +57,7 @@ namespace ia
|
||||
BOOL contains(IN CONST key_type& key) CONST;
|
||||
|
||||
public:
|
||||
_value_type& operator[](IN CONST _key_type& key) { const auto t = get(key); if(t) return *t; set(key, value_type()); return (*m_insertedOrder.back())->Value; }
|
||||
_value_type& operator[](IN CONST _key_type& key) { const auto t = get(key); if(t) return *t; set(key, value_type()); return m_insertedOrder.back()->Value; }
|
||||
CONST _value_type& operator[](IN CONST _key_type& key) CONST { const auto t = get(key); if(!t) throw "no such key"; return *t; }
|
||||
|
||||
public:
|
||||
@ -81,6 +81,6 @@ namespace ia
|
||||
|
||||
private:
|
||||
Vector<List<KeyValuePair>> m_buckets;
|
||||
Vector<ListEntry<KeyValuePair>*> m_insertedOrder;
|
||||
Vector<KeyValuePair*> m_insertedOrder;
|
||||
};
|
||||
}
|
||||
|
||||
@ -39,7 +39,8 @@ namespace ia
|
||||
{
|
||||
define_member_function(VOID, set, IN CONST key_type& key, IN value_type&& value)
|
||||
{
|
||||
m_insertedOrder.pushBack(getBucket(key).append({ key, IA_MOVE(value) }));
|
||||
const auto listEntry = getBucket(key).append({ key, IA_MOVE(value) });
|
||||
m_insertedOrder.pushBack(*listEntry);
|
||||
}
|
||||
|
||||
define_const_member_function(CONST _value_type*, get, IN CONST key_type& key)
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
#include <iacore/file.hpp>
|
||||
|
||||
#include <iacore/vector.hpp>
|
||||
#include <iacore/map.hpp>
|
||||
|
||||
using namespace ia;
|
||||
|
||||
@ -18,5 +19,16 @@ int main(int argc, char* argv[])
|
||||
|
||||
print(v1);
|
||||
|
||||
List<int> l1;
|
||||
|
||||
Map<String, int> m1;
|
||||
m1["sdd"] = 2;
|
||||
m1["bx"] = 5;
|
||||
|
||||
for(const auto& v: m1)
|
||||
{
|
||||
printf("%s, %i\n", v->Key.c_str(), v->Value);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user