Check out ObjectIstSort:
http://quest5.net/wiki/ObjectListSortht ... ctListSortYou can sort a list of objects based on a specific attribute (speed in your case).
Lists in Quest are *sort of* like arrays (vectors) in other languages. The drawback in Quest is that you can't arbitrarily assign to them. You can read from an arbitrary index, but you can only add items on the end. That makes some things a bit difficult, to say the least.
I discovered that the expression parser does support the "[]" notation for accessing elements. So if you have a list called "myList", you can use "myList[2]" (or myList[someIndex]) to access values. But you can't do "myList[3] = someValue".
Quest also uses the bracket notation for template strings [ATemplate], so that probably explains your error message, if you used it in an "unacceptable" way.
Dictionaries correspond to maps in other languages (aka "associative arrays"). The key must be a string, but if you create a generic dictionary (use NewDictionary instead of something like NewStringDictionary), then you can assign any type to a value. The drawback to dictionaries in Quest is that you can't set a value if the value has already been set - you must remove it first, which can be a real pain in some cases.
I have a C++ background as well, but Quest feels more like JavaScript, in that you don't define classes and all that. You just have objects with attributes, and attributes can even change type through the life of the program, morphing to the value you assign to them. It's different but also liberating.
If you stick with it, you might not look at C++ the same again.