Когда Вы пишете
map[key] = value;
нет никакого способа сказать, заменили ли Вы value
для key
, или если Вы создали новое key
с value
.
map::insert()
только создаст:
using std::cout; using std::endl;
typedef std::map MyMap;
MyMap map;
// ...
std::pair res = map.insert(MyMap::value_type(key,value));
if ( ! res.second ) {
cout << "key " << key << " already exists "
<< " with value " << (res.first)->second << endl;
} else {
cout << "created key " << key << " with value " << value << endl;
}
Для большинства моих приложений, я обычно не забочусь, создаю ли я или заменяю, таким образом, я использую более легкое для чтения map[key] = value
.
Вы не расширяете таблицу, проиндексированную "чем-то", вы можете просто использовать это ...
DECLARE
TYPE t_simple_object IS RECORD
( wert NUMBER
, gs NUMBER
, vl NUMBER
);
TYPE t_obj_table IS TABLE OF t_simple_object
INDEX BY BINARY_INTEGER;
my_rec t_simple_object;
obj t_obj_table;
BEGIN
my_rec.wert := 1;
my_rec.gs := 1;
my_rec.vl := 1;
obj(1) := my_rec;
END;
/
Чтобы использовать синтаксис EXTEND, этот пример должен сделать это ...
DECLARE
TYPE t_simple_object IS RECORD
( wert NUMBER
, gs NUMBER
, vl NUMBER
);
TYPE t_obj_table IS TABLE OF t_simple_object;
my_rec t_simple_object;
obj t_obj_table := t_obj_table();
BEGIN
obj.EXTEND;
my_rec.wert := 1;
my_rec.gs := 1;
my_rec.vl := 1;
obj(1) := my_rec;
END;
/
Также см. эту ссылку (Спросите Тома)
Вы не можете расширить ассоциативный массив. Просто присвойте ему значения
declare
TYPE t_simple_object IS RECORD (
wert NUMBER,
gs NUMBER,
vl NUMBER);
TYPE t_obj_table IS TABLE OF t_simple_object INDEX BY BINARY_INTEGER;
simple_object t_simple_object;
begin
simple_object.wert := 1;
simple_object.gs := 2;
simple_object.vl := 3;
obj(1) := simple_object;
end;
/
Если вы не хотите использовать ассоциативный массив (также известный как индексная таблица), опустите предложение «INDEX BY BINARY_INTEGER». Тогда ваш код работает нормально:
declare
TYPE t_simple_object IS RECORD (
wert NUMBER,
gs NUMBER,
vl NUMBER);
TYPE t_obj_table IS TABLE OF t_simple_object;
obj t_obj_table;
begin
obj := t_obj_table ();
obj.EXTEND();
end;