Вы не можете копировать массивы по таким значениям.
Вот несколько решений, но я рекомендую # 4 для ваших нужд:
1) Использовать std::vector
вместо массива
2) Используйте карту указателей на массивы из 3 элементов.
int red[3] = {1,0,0};
int green[3] = {0,1,0};
int blue[3] = {0,0,1};
std::map<int,int(*)[3]> colours;
colours.insert(std::pair<int,int(*)[3]>(GLUT_LEFT_BUTTON,&red));
colours.insert(std::pair<int,int(*)[3]>(GLUT_MIDDLE_BUTTON,&blue));
colours.insert(std::pair<int,int(*)[3]>(GLUT_RIGHT_BUTTON,&green));
//Watch out for scope here, you may need to create the arrays on the heap.
3) Используйте буст-кортежи вместо массивов из 3 элементов.
4) Вместо использования массива создайте новую структуру, которая принимает 3 элемента. Сделай карту. Или оберните ваш массив в структуру, и это тоже будет работать.
struct Triple
{
int color[3];
};
//Later in code
Tripple red = {1, 0, 0}, green = {0, 1, 0}, blue = {0, 0, 1};
std::map<int,Triple> colours;
colours.insert(std::pair<int,Triple>(GLUT_LEFT_BUTTON,red));
colours.insert(std::pair<int,Triple>(GLUT_MIDDLE_BUTTON,blue));
colours.insert(std::pair<int,Triple>(GLUT_RIGHT_BUTTON,green));