#include <algorithm>
#include <iostream>
#include <iterator>
#include <map>
#include <sstream>
#include <string>
using namespace std;

template <typename T>
T findNonEscaped(T start, T end, const char ch) {
	T result = find(start, end, ch);

	while (result != end && result[-1] == '\\') result = find(start, end, ch);

	return result;
}

template <typename T>
T extractParenthesis(T start, T end) {
	T finish = findNonEscaped(start, end, ')');

	for (auto i = findNonEscaped(next(start), end, '('); i != end && i < finish; i = findNonEscaped(next(i), end, '(')) finish = findNonEscaped(next(finish), end, ')');
	return finish;
}

int main() {
	const auto input = "data1(\" value 1 \") data2 (\"value 2\") anything3(\"  data3(\"value\") \")"s;
	map<string, string> output;

	for (auto openParenthesis = findNonEscaped(input.cbegin(), input.cend(), '('), closeParenthesis = input.cbegin(); openParenthesis != input.cend(); openParenthesis = findNonEscaped(openParenthesis, input.cend(), '(')) {
		decltype(output)::key_type key;
		istringstream ss{ string{ make_reverse_iterator(openParenthesis), make_reverse_iterator(closeParenthesis) } };
		
		ss >> key;
		closeParenthesis = extractParenthesis(openParenthesis, input.cend());
		output[decltype(output)::key_type{ key.crbegin(), key.crend() }] = decltype(output)::mapped_type{ next(findNonEscaped(next(openParenthesis), closeParenthesis, '"')), prev(findNonEscaped(make_reverse_iterator(closeParenthesis), make_reverse_iterator(next(openParenthesis)), '"').base()) };
		openParenthesis = closeParenthesis;
	}

	for (auto& i : output) {
		cout << i.first << " : " << i.second << endl;
	}
}