Skip to content

hansalemaos/stl_pretty_print

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Pretty Printer for any arbitrarily (deeply) nested STL container

... should work for any (nested) container (unordered map/vector/array/set...) in the std library

Getting started

#include "prettyprint.hpp" //include the library
// Tested with the compilers: g++ (linux), zig (win), msvc (win) / c++20

int main() {
    std::vector<std::vector<int>> nestedVec = { {1, 2, 3}, {4, 5}, {6} };
    prettyprinter::print_red(nestedVec, "Prefix: vec1--->", "Suffix<---vec1"); //prefix and suffix optional
    prettyprinter::print_green(nestedVec);

    return 0;
}
// That's all there is to know.
// Scroll down to see some more examples

how to use it

download the header file and include it

Here are some tests with data generated by ChatGTP
#include "prettyprint.hpp" //include the library

int main() {

	// Simple vector of integers
	std::vector<int> vec1 = { 1, 2, 3, 4, 5 };

	// Nested vector of vectors
	std::vector<std::vector<int>> nestedVec = { {1, 2, 3}, {4, 5}, {6} };

	// Map of string to integer
	std::map<std::string, int> map1 = { {"one", 1}, {"two", 2}, {"three", 3} };

	// Nested map of string to vector of integers
	std::map<std::string, std::vector<int>> nestedMap = {
		{"group1", {1, 2, 3}},
		{"group2", {4, 5, 6}},
		{"group3", {7, 8, 9}}
	};

	// Set of integers
	std::set<int> set1 = { 10, 20, 30 };

	// Nested set of sets
	std::set<std::set<int>> nestedSet = { {1, 2}, {3, 4}, {5} };

	// Unordered map of string to set of integers
	std::unordered_map<std::string, std::set<int>> unorderedMap = {
		{"a", {1, 2, 3}},
		{"b", {4, 5}},
		{"c", {6}}
	};

	// Pair of integer and string
	std::pair<int, std::string> pair1 = { 42, "answer" };

	// Vector of pairs
	std::vector<std::pair<std::string, int>> vecOfPairs = {
		{"apple", 1}, {"banana", 2}, {"cherry", 3}
	};

	// Priority queue (example of unsupported type)
	std::priority_queue<int> pq;
	pq.push(10);
	pq.push(20);
	pq.push(30);
	// Note: Priority queues can't be directly iterated. You'll need to extract items for printing.



	std::vector<std::vector<std::map<std::string, int>>> deepNestedVec = {
	{
		{{"a", 1}, {"b", 2}},
		{{"c", 3}, {"d", 4}}
	},
	{
		{{"e", 5}, {"f", 6}},
		{{"g", 7}, {"h", 8}}
	}
	};

	// Map of string to vector of set of pairs
	std::map<std::string, std::vector<std::set<std::pair<int, std::string>>>> deepNestedMap = {
		{"group1", {{{1, "one"}, {2, "two"}}, {{3, "three"}}}},
		{"group2", {{{4, "four"}, {5, "five"}}, {{6, "six"}}}}
	};

	// Unordered map of set of map of vector
	std::unordered_map<std::string, std::set<std::map<std::string, std::vector<int>>>> crazyNestedMap = {
		{"level1", {{{"key1", {1, 2, 3}}, {"key2", {4, 5}}}}},
		{"level2", {{{"key3", {6, 7, 8}}, {"key4", {9}}}}}
	};

	// Vector of deque of list of pairs
	std::vector<std::deque<std::list<std::pair<std::string, int>>>> nestedContainers = {
		{
			{{"item1", 10}, {"item2", 20}},
			{{"item3", 30}}
		},
		{
			{{"item4", 40}, {"item5", 50}},
			{{"item6", 60}}
		}
	};

	// Nested array of map of vector of set
	std::vector<std::map<std::string, std::vector<std::set<int>>>> arrayNestedMap = {
		std::map<std::string, std::vector<std::set<int>>>{
			{"groupA", {{1, 2}, {3, 4}}},
			{"groupB", {{5, 6}, {7}}}
		},
		std::map<std::string, std::vector<std::set<int>>>{
			{"groupC", {{8, 9}, {10}}},
			{"groupD", {{11}, {12, 13}}}
		}
	};

	// Insanely nested vector
	std::vector<std::vector<std::vector<std::vector<int>>>> insaneVec = {
		{{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}},
		{{{9, 10}, {11, 12}}, {{13, 14}, {15, 16}}}
	};


	// To print the data structures 
    // Since I made it for debug purposes, you can pass an optional prefix and suffix

	prettyprinter::print_black(vec1, "\nPrefix: vec1--->\n", "<---vec1");
	prettyprinter::print_red(vec1, "\nPrefix: vec1--->\n", "<---vec1");
	prettyprinter::print_green(vec1, "\nPrefix: vec1--->\n", "<---vec1");
	prettyprinter::print_yellow(vec1, "\nPrefix: vec1--->\n", "<---vec1");
	prettyprinter::print_blue(vec1, "\nPrefix: vec1--->\n", "<---vec1");
	prettyprinter::print_purple(vec1, "\nPrefix: vec1--->\n", "<---vec1");
	prettyprinter::print_cyan(vec1, "\nPrefix: vec1--->\n", "<---vec1");
	prettyprinter::print_white(vec1, "\nPrefix: vec1--->\n", "<---vec1");
	prettyprinter::print_black(nestedVec, "\nPrefix: nestedVec--->\n", "<---nestedVec");
	prettyprinter::print_red(nestedVec, "\nPrefix: nestedVec--->\n", "<---nestedVec");
	prettyprinter::print_green(nestedVec, "\nPrefix: nestedVec--->\n", "<---nestedVec");
	prettyprinter::print_yellow(nestedVec, "\nPrefix: nestedVec--->\n", "<---nestedVec");
	prettyprinter::print_blue(nestedVec, "\nPrefix: nestedVec--->\n", "<---nestedVec");
	prettyprinter::print_purple(nestedVec, "\nPrefix: nestedVec--->\n", "<---nestedVec");
	prettyprinter::print_cyan(nestedVec, "\nPrefix: nestedVec--->\n", "<---nestedVec");
	prettyprinter::print_white(nestedVec, "\nPrefix: nestedVec--->\n", "<---nestedVec");
	prettyprinter::print_black(map1, "\nPrefix: map1--->\n", "<---map1");
	prettyprinter::print_red(map1, "\nPrefix: map1--->\n", "<---map1");
	prettyprinter::print_green(map1, "\nPrefix: map1--->\n", "<---map1");
	prettyprinter::print_yellow(map1, "\nPrefix: map1--->\n", "<---map1");
	prettyprinter::print_blue(map1, "\nPrefix: map1--->\n", "<---map1");
	prettyprinter::print_purple(map1, "\nPrefix: map1--->\n", "<---map1");
	prettyprinter::print_cyan(map1, "\nPrefix: map1--->\n", "<---map1");
	prettyprinter::print_white(map1, "\nPrefix: map1--->\n", "<---map1");
	prettyprinter::print_black(nestedMap, "\nPrefix: nestedMap--->\n", "<---nestedMap");
	prettyprinter::print_red(nestedMap, "\nPrefix: nestedMap--->\n", "<---nestedMap");
	prettyprinter::print_green(nestedMap, "\nPrefix: nestedMap--->\n", "<---nestedMap");
	prettyprinter::print_yellow(nestedMap, "\nPrefix: nestedMap--->\n", "<---nestedMap");
	prettyprinter::print_blue(nestedMap, "\nPrefix: nestedMap--->\n", "<---nestedMap");
	prettyprinter::print_purple(nestedMap, "\nPrefix: nestedMap--->\n", "<---nestedMap");
	prettyprinter::print_cyan(nestedMap, "\nPrefix: nestedMap--->\n", "<---nestedMap");
	prettyprinter::print_white(nestedMap, "\nPrefix: nestedMap--->\n", "<---nestedMap");
	prettyprinter::print_black(set1, "\nPrefix: set1--->\n", "<---set1");
	prettyprinter::print_red(set1, "\nPrefix: set1--->\n", "<---set1");
	prettyprinter::print_green(set1, "\nPrefix: set1--->\n", "<---set1");
	prettyprinter::print_yellow(set1, "\nPrefix: set1--->\n", "<---set1");
	prettyprinter::print_blue(set1, "\nPrefix: set1--->\n", "<---set1");
	prettyprinter::print_purple(set1, "\nPrefix: set1--->\n", "<---set1");
	prettyprinter::print_cyan(set1, "\nPrefix: set1--->\n", "<---set1");
	prettyprinter::print_white(set1, "\nPrefix: set1--->\n", "<---set1");
	prettyprinter::print_black(nestedSet, "\nPrefix: nestedSet--->\n", "<---nestedSet");
	prettyprinter::print_red(nestedSet, "\nPrefix: nestedSet--->\n", "<---nestedSet");
	prettyprinter::print_green(nestedSet, "\nPrefix: nestedSet--->\n", "<---nestedSet");
	prettyprinter::print_yellow(nestedSet, "\nPrefix: nestedSet--->\n", "<---nestedSet");
	prettyprinter::print_blue(nestedSet, "\nPrefix: nestedSet--->\n", "<---nestedSet");
	prettyprinter::print_purple(nestedSet, "\nPrefix: nestedSet--->\n", "<---nestedSet");
	prettyprinter::print_cyan(nestedSet, "\nPrefix: nestedSet--->\n", "<---nestedSet");
	prettyprinter::print_white(nestedSet, "\nPrefix: nestedSet--->\n", "<---nestedSet");
	prettyprinter::print_black(unorderedMap, "\nPrefix: unorderedMap--->\n", "<---unorderedMap");
	prettyprinter::print_red(unorderedMap, "\nPrefix: unorderedMap--->\n", "<---unorderedMap");
	prettyprinter::print_green(unorderedMap, "\nPrefix: unorderedMap--->\n", "<---unorderedMap");
	prettyprinter::print_yellow(unorderedMap, "\nPrefix: unorderedMap--->\n", "<---unorderedMap");
	prettyprinter::print_blue(unorderedMap, "\nPrefix: unorderedMap--->\n", "<---unorderedMap");
	prettyprinter::print_purple(unorderedMap, "\nPrefix: unorderedMap--->\n", "<---unorderedMap");
	prettyprinter::print_cyan(unorderedMap, "\nPrefix: unorderedMap--->\n", "<---unorderedMap");
	prettyprinter::print_white(unorderedMap, "\nPrefix: unorderedMap--->\n", "<---unorderedMap");
	prettyprinter::print_black(pair1, "\nPrefix: pair1--->\n", "<---pair1");
	prettyprinter::print_red(pair1, "\nPrefix: pair1--->\n", "<---pair1");
	prettyprinter::print_green(pair1, "\nPrefix: pair1--->\n", "<---pair1");
	prettyprinter::print_yellow(pair1, "\nPrefix: pair1--->\n", "<---pair1");
	prettyprinter::print_blue(pair1, "\nPrefix: pair1--->\n", "<---pair1");
	prettyprinter::print_purple(pair1, "\nPrefix: pair1--->\n", "<---pair1");
	prettyprinter::print_cyan(pair1, "\nPrefix: pair1--->\n", "<---pair1");
	prettyprinter::print_white(pair1, "\nPrefix: pair1--->\n", "<---pair1");
	prettyprinter::print_black(vecOfPairs, "\nPrefix: vecOfPairs--->\n", "<---vecOfPairs");
	prettyprinter::print_red(vecOfPairs, "\nPrefix: vecOfPairs--->\n", "<---vecOfPairs");
	prettyprinter::print_green(vecOfPairs, "\nPrefix: vecOfPairs--->\n", "<---vecOfPairs");
	prettyprinter::print_yellow(vecOfPairs, "\nPrefix: vecOfPairs--->\n", "<---vecOfPairs");
	prettyprinter::print_blue(vecOfPairs, "\nPrefix: vecOfPairs--->\n", "<---vecOfPairs");
	prettyprinter::print_purple(vecOfPairs, "\nPrefix: vecOfPairs--->\n", "<---vecOfPairs");
	prettyprinter::print_cyan(vecOfPairs, "\nPrefix: vecOfPairs--->\n", "<---vecOfPairs");
	prettyprinter::print_white(vecOfPairs, "\nPrefix: vecOfPairs--->\n", "<---vecOfPairs");
	prettyprinter::print_black(deepNestedVec, "\nPrefix: deepNestedVec--->\n", "<---deepNestedVec");
	prettyprinter::print_red(deepNestedVec, "\nPrefix: deepNestedVec--->\n", "<---deepNestedVec");
	prettyprinter::print_green(deepNestedVec, "\nPrefix: deepNestedVec--->\n", "<---deepNestedVec");
	prettyprinter::print_yellow(deepNestedVec, "\nPrefix: deepNestedVec--->\n", "<---deepNestedVec");
	prettyprinter::print_blue(deepNestedVec, "\nPrefix: deepNestedVec--->\n", "<---deepNestedVec");
	prettyprinter::print_purple(deepNestedVec, "\nPrefix: deepNestedVec--->\n", "<---deepNestedVec");
	prettyprinter::print_cyan(deepNestedVec, "\nPrefix: deepNestedVec--->\n", "<---deepNestedVec");
	prettyprinter::print_white(deepNestedVec, "\nPrefix: deepNestedVec--->\n", "<---deepNestedVec");
	prettyprinter::print_black(deepNestedMap, "\nPrefix: deepNestedMap--->\n", "<---deepNestedMap");
	prettyprinter::print_red(deepNestedMap, "\nPrefix: deepNestedMap--->\n", "<---deepNestedMap");
	prettyprinter::print_green(deepNestedMap, "\nPrefix: deepNestedMap--->\n", "<---deepNestedMap");
	prettyprinter::print_yellow(deepNestedMap, "\nPrefix: deepNestedMap--->\n", "<---deepNestedMap");
	prettyprinter::print_blue(deepNestedMap, "\nPrefix: deepNestedMap--->\n", "<---deepNestedMap");
	prettyprinter::print_purple(deepNestedMap, "\nPrefix: deepNestedMap--->\n", "<---deepNestedMap");
	prettyprinter::print_cyan(deepNestedMap, "\nPrefix: deepNestedMap--->\n", "<---deepNestedMap");
	prettyprinter::print_white(deepNestedMap, "\nPrefix: deepNestedMap--->\n", "<---deepNestedMap");
	prettyprinter::print_black(crazyNestedMap, "\nPrefix: crazyNestedMap--->\n", "<---crazyNestedMap");
	prettyprinter::print_red(crazyNestedMap, "\nPrefix: crazyNestedMap--->\n", "<---crazyNestedMap");
	prettyprinter::print_green(crazyNestedMap, "\nPrefix: crazyNestedMap--->\n", "<---crazyNestedMap");
	prettyprinter::print_yellow(crazyNestedMap, "\nPrefix: crazyNestedMap--->\n", "<---crazyNestedMap");
	prettyprinter::print_blue(crazyNestedMap, "\nPrefix: crazyNestedMap--->\n", "<---crazyNestedMap");
	prettyprinter::print_purple(crazyNestedMap, "\nPrefix: crazyNestedMap--->\n", "<---crazyNestedMap");
	prettyprinter::print_cyan(crazyNestedMap, "\nPrefix: crazyNestedMap--->\n", "<---crazyNestedMap");
	prettyprinter::print_white(crazyNestedMap, "\nPrefix: crazyNestedMap--->\n", "<---crazyNestedMap");
	prettyprinter::print_black(nestedContainers, "\nPrefix: nestedContainers--->\n", "<---nestedContainers");
	prettyprinter::print_red(nestedContainers, "\nPrefix: nestedContainers--->\n", "<---nestedContainers");
	prettyprinter::print_green(nestedContainers, "\nPrefix: nestedContainers--->\n", "<---nestedContainers");
	prettyprinter::print_yellow(nestedContainers, "\nPrefix: nestedContainers--->\n", "<---nestedContainers");
	prettyprinter::print_blue(nestedContainers, "\nPrefix: nestedContainers--->\n", "<---nestedContainers");
	prettyprinter::print_purple(nestedContainers, "\nPrefix: nestedContainers--->\n", "<---nestedContainers");
	prettyprinter::print_cyan(nestedContainers, "\nPrefix: nestedContainers--->\n", "<---nestedContainers");
	prettyprinter::print_white(nestedContainers, "\nPrefix: nestedContainers--->\n", "<---nestedContainers");
	prettyprinter::print_black(arrayNestedMap, "\nPrefix: arrayNestedMap--->\n", "<---arrayNestedMap");
	prettyprinter::print_red(arrayNestedMap, "\nPrefix: arrayNestedMap--->\n", "<---arrayNestedMap");
	prettyprinter::print_green(arrayNestedMap, "\nPrefix: arrayNestedMap--->\n", "<---arrayNestedMap");
	prettyprinter::print_yellow(arrayNestedMap, "\nPrefix: arrayNestedMap--->\n", "<---arrayNestedMap");
	prettyprinter::print_blue(arrayNestedMap, "\nPrefix: arrayNestedMap--->\n", "<---arrayNestedMap");
	prettyprinter::print_purple(arrayNestedMap, "\nPrefix: arrayNestedMap--->\n", "<---arrayNestedMap");
	prettyprinter::print_cyan(arrayNestedMap, "\nPrefix: arrayNestedMap--->\n", "<---arrayNestedMap");
	prettyprinter::print_white(arrayNestedMap, "\nPrefix: arrayNestedMap--->\n", "<---arrayNestedMap");
	prettyprinter::print_black(insaneVec, "\nPrefix: insaneVec--->\n", "<---insaneVec");
	prettyprinter::print_red(insaneVec, "\nPrefix: insaneVec--->\n", "<---insaneVec");
	prettyprinter::print_green(insaneVec, "\nPrefix: insaneVec--->\n", "<---insaneVec");
	prettyprinter::print_yellow(insaneVec, "\nPrefix: insaneVec--->\n", "<---insaneVec");
	prettyprinter::print_blue(insaneVec, "\nPrefix: insaneVec--->\n", "<---insaneVec");
	prettyprinter::print_purple(insaneVec, "\nPrefix: insaneVec--->\n", "<---insaneVec");
	prettyprinter::print_cyan(insaneVec, "\nPrefix: insaneVec--->\n", "<---insaneVec");
	prettyprinter::print_white(insaneVec, "\nPrefix: insaneVec--->\n", "<---insaneVec");
	return 0;
}

About

Pretty Printer for any arbitrarily nested STL container

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages