2016-03-19 6 views
4
local pricetagColors = { 
    [3242] = {255, 0, 255}, 
    [6712] = {255, 255, 0} 
} 

function getPricetagColor(itemnumber) 
    local r, g, b = 0, 0, 0 

    if pricetagColors[itemnumber] then 
     r, g, b = pricetagColors[itemnumber][1], pricetagColors[itemnumber][2], pricetagColors[itemnumber[3] 
    end 

    return {r, g, b} 
end 

Хорошо, поэтому я пытаюсь войти в C++ прямо сейчас шаг за шагом. Прямо сейчас я пытаюсь понять, как создаются массивы (сложные?) В C++. Поскольку я понятия не имею, как объяснить это по-другому, я сделал это в LUA, так как это то, что я знаю лучше всего. Функция не важная вещь, важно, что массив, потому что я искал вокруг в течение нескольких часов, но я не могу понять, как получить массив, который вы видите в lua, выполненном на C++.lua array в C++ array

+0

В чем заключаются идентификаторы id1 и id2? – hugomg

+0

в основном просто число, которое представляет элемент, например. 1234 – RamRick

+0

Я немного изменил свой код, так что может быть немного яснее – RamRick

ответ

1

Добро пожаловать на C++. В принципе, я думаю, что это может быть достигнуто с помощью MAP-функций C++. Также можно указать MUlti-Map.

Пример сниппета Может быть звучит так: (Только для понимания @d способ мышления коррелируют в вашем примере)

например:

ВХОД:

//Declare Map 

std::map <int, std::string> stdBindList; 
std::map <int, std::string>::iterator pos; 

//Add Elements 

stdBindList.insert (std::pair<int,std::string>(15,”a”)); // 1 
stdBindList.insert (std::pair<int,std::string>(22,”b”)); // 2 

stdBindList.insert (std::pair<int,std::string>(12,”c”)); // 3 
stdBindList.insert (std::pair<int,std::string>(15,”d”)); // 4 
stdBindList.insert (std::pair<int,std::string>(5,”e”)); // 5 
stdBindList.insert (std::pair<int,std::string>(5,”f”)); // 6 
stdBindList.insert (std::pair<int,std::string>(2,”g”)); // 7 

stdBindList.insert (std::pair<int,std::string>(5,”h”)); // 8 
stdBindList.insert (std::pair<int,std::string>(5,”i”)); // 9 

//iterate and print 

for (pos = stdBindList.begin();pos!=stdBindList.end();pos++) 
{ 

} 

ВЫХОД:

+–g 
| 2 
+–e 
| 5 
+–c 
| 12 
+–a 
| 15 
+–b 
| 22 
+0

проблема, которую я имею (может быть, даже не проблема, и только в моей голове) заключается в том, что значение каждого ключа массива также является массивом, а не простая строка или целое число или что-то еще. Я не могу придумать, как это сделать в этом случае. – RamRick

+1

Попробуйте использовать карту памяти (MultiMap)! – Ragav

2

Похоже, что у вас в вопросе равно std::map<int, std::array<int, 3>>.

std::map<int, std::array<int, 3>> pricetagColors; 
pricetagColors[3242] = {255, 0, 255}; 
pricetagColors[6712] = {255, 255, 0}; 

int itemnumber = 3242, r, g, b; 
if (pricetagColors.find(itemnumber) != pricetagColors.end()) 
{ 
    r = pricetagColors[itemnumber][0]; 
    g = pricetagColors[itemnumber][1]; 
    b = pricetagColors[itemnumber][2]; //Note that the comma operator could be used here, 
             //but it isn't really an idiomatic C++ use 
} 
+0

Спасибо, это именно то, что я искал. Одна проблема, однако, я получаю сообщение об ошибке pricetagColors, говоря: «выражение должно быть указателем на полный тип объекта» – RamRick

+0

@RamRick Должно быть исправлено. – IllusiveBrian