Скажите, если у меня есть следующая карта, где каждый элемент содержит массив:
struct STRUCT{
int value;
std::vector<MY_DATA> myArr;
};
std::map<UINT, STRUCT> myMap;
И затем, если я хочу добавить новый элемент к этой карте и одновременно инициализировать его:
//But, let's say we have a 'STRUCT' with a large number of items in the vector
std::vector<MY_DATA> arr;
arr.resize(0x10000); //Arbitrary
int val = 123;
addToMap(&arr, val);
Насколько я понимаю, у меня есть следующие способы сделать это:
void addToMap1(UINT id, std::vector<MY_DATA>* pArr, int val)
{
//Method 1
STRUCT myStruct;
myStruct.myArr = *pArr;
myStruct.value = val;
myMap[id] = myStruct;
}
void addToMap2(UINT id, std::vector<MY_DATA>* pArr, int val)
{
//Method 2
myMap[id] = STRUCT();
STRUCT* pS = &myMap[id];
pS->myArr = *pArr;
pS->value = val;
}
void addToMap3(UINT id, std::vector<MY_DATA>* pArr, int val)
{
//Method 3
myMap[id] = STRUCT();
std::map<UINT, STRUCT>::iterator itr = myMap.find(id);
STRUCT* pS = &itr->second;
pS->myArr = *pArr;
pS->value = val;
}
void addToMap4(UINT id, std::vector<MY_DATA>* pArr, int val)
{
//Method 4
std::pair<std::map<UINT, STRUCT>::iterator, bool> prNew =
myMap.insert(std::pair<UINT, STRUCT>(id, STRUCT()));
ASSERT(prNew.second); //It must have not existed before!
STRUCT* pS = &prNew.first->second;
pS->myArr = *pArr;
pS->value = val;
}
Но какой самый эффективный способ сделать это?