Prościej, bez użycia sugerowanych wyrażeń regularnych, można zrobić tak:
using svec_type = vector<string>;
using param_type = pair<string, svec_type>;
ifstream is(...);
string line;
vector<param_type> parameters; // <--- tu będziesz miał przeczytane parametry
while(getline(is, line))
{
istringstream iss(move(line));
string name;
while(iss >> name)
{
if(name.front() != '[' || name.back() != ']') break;
svec_type v;
copy(istream_iterator<string>(iss), istream_iterator<string>(), back_inserter(v));
parameters.emplace_back(make_pair(move(name), move(v)));
}
}
// wyświetlanie
for(auto p : parameters)
{
cout << p.first << '\n';
for(auto v : p.second)
cout << '\t' << v << '\n';
}