To answer your first question: Your Java code with the runnable creates an anonymous class with a custom constructor, something like that doesn't exist in C++ (to my knowledge).
However, C++ does just fine without it. A thread can be supplied with a lambda, like so:
thread t([](){
std::cout << "hi from thread" << std::endl;
});
For your other question: vectors can be constructed from initializer lists, meaning such things are valid:
vector<int> list_1(4,5); // take care!! list is 5,5,5,5!
vector<int> list_2{4,5}; // list_2 is 4,5
vector<int> list_3 = {4,5}; // list_3 is 4,5
list_1 = {1,2,3}; // list_1 is now 1,2,3
// all the above are using so called initializer lists
vector<vector<int>> store;
store.insert(store.begin(), {1,3}); // store is {{1,3}}
store.insert(store.begin(), {1,3,3});// store is {{1,3},{1,3,3}}
store = {{4},{7,8},{1,2,3}}; // store is {{4},{7,8},{1,2,3}}
struct KV{int key; int value;};
vector<KV> store2{{1,5},{7,8}}; // store has two KVs,{1,5} and {7,8}
store2.insert(store2.begin(), {3,3});// ... and now also {3,3}
// note:creating a KV by doing KV x{4,5} is called
// uniform initialization.
// it's the same syntax as list initializers, but they are different
// things!