ES6: минимальный код я мог сделать его, это. Это делает глубокое сравнение рекурсивно stringifying все объекты, единственное ограничение не является никакими методами, или символы, выдерживают сравнение.
const compareObjects = (a, b) => {
let s = (o) => Object.entries(o).sort().map(i => {
if(i[1] instanceof Object) i[1] = s(i[1]);
return i
})
return JSON.stringify(s(a)) === JSON.stringify(s(b))
}
console.log(compareObjects({b:4,a:{b:1}}, {a:{b:1},b:4}));
Первая структура данных будет работать. Вы можете typedef
часть кода, чтобы упростить работу в будущем:
typedef std::vector<MyClass> MyClassSet;
typedef std::map<int, MyClassSet> MyClassSetMap;
MyClassSetMap map;
map.insert(MyClassSetMap::value_type(10, MyClassSet()));
или (спасибо quamrana ):
map[10] = MyClassSet();
Вы можете делать все, что вы предлагаете, с помощью плагина StatET для Eclipse. Это то, что я использую для разработки Sweave; он очень хорошо понимает и латекс, и R, включая подсветку синтаксиса и т. д.
Вы можете получить его здесь: http://www.walware.de/goto/statet .
Longhow Lam имеет написал хорошее руководство: http://www.splusbook.com/Rintro/R_Eclipse_StatET.pdf .
http: //www.statalgo. Они вставят значение в карту.
map[10]; // create the 10 element if it does not exist
// using the default constructor.
Если вы собираетесь использовать вскоре после построения, то:
std::vector<MyClass>& v = map[10];
Теперь он построен, и у вас есть локальная ссылка на объект.
Вы должны прочитать сообщения об ошибках компиляции. Обычно они предоставляют вам всю необходимую информацию.
Ваш код дает ошибку «незаконное использование этого типа в качестве выражения»
в этой строке. Это означает, что вы используете тип, а не объект. Чтобы использовать объект, вы можете просто добавить () для вызова конструктора без аргументов.
map.insert(pair<int, vector<MyClass> >(10, vector<MyClass>()));
Кстати, вы можете использовать std :: make_pair для создания пар. Он определяет типы аргументов, поэтому не нужно их явно указывать.
map.insert( make_pair( 10, vector<MyClass>() ) );
Да, но ваша вторая строка должна быть:
map.insert(pair<int, vector<MyClass> >(10, vector<MyClass>()));
Здесь вставляется пара, состоящая из целого числа 10 и пустого вектора. Оба будут скопированы, и если вы имеете дело с большими векторами, вы должны быть осторожны с копиями.
Также: не вызывайте переменные "map", пока с использованием пространства имен std
. Вы меня пугаете; -)
Используя определения типов из fbrereton, вы также можете сделать это:
typedef std::vector<MyClass> MyClassSet;
typedef std::map<int, MyClassSet> MyClassSetMap;
MyClassSetMap map;
map[10]=MyClassSet();
Вы можете использовать оператор []
вместо insert ().
Это немного снижает линейный шум.
Вам просто не хватает пары скобок:
map.insert(pair<int, vector<MyClass> >(10, vector<MyClass>()));
Между прочим, есть вспомогательная функция std: : make_pair, который заботится о выводе аргументов шаблона:
map.insert(make_pair(10, vector<MyClass>()));
Рассмотрение использования вместо этого указателя на динамически выделяемый вектор - довольно плохая идея, так как это возлагает на вас ответственность за управление экземпляром. Кроме того, поскольку карта никогда не должна перемещать свое содержимое в памяти, нет ничего иного в плане производительности.
sa вспомогательная функция std :: make_pair, которая заботится о выводе аргументов шаблона:map.insert(make_pair(10, vector<MyClass>()));
Использование вместо этого указателя на динамически выделяемый вектор - довольно плохая идея, так как это возлагает на вас ответственность за управление экземпляром. Кроме того, поскольку карта никогда не должна перемещать свое содержимое в памяти, нет ничего иного в плане производительности.
sa вспомогательная функция std :: make_pair, которая заботится о выводе аргументов шаблона:map.insert(make_pair(10, vector<MyClass>()));
Использование вместо этого указателя на динамически выделяемый вектор - довольно плохая идея, так как это возлагает на вас ответственность за управление экземпляром. Кроме того, поскольку карта никогда не должна перемещать свое содержимое в памяти, нет ничего иного в плане производительности.