Struct in map nutzen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Struct in map nutzen

    Guten Morgen,
    ich hab mir ein kleines Programm geschrieben, das einen Ordner nach php- und js-Dateien durchsucht und die Ergebnisse auswertet.

    Quellcode

    1. #include <boost/filesystem.hpp>
    2. #include <iostream>
    3. #include <fstream>
    4. #include <map>
    5. #include <string>
    6. #include <vector>
    7. namespace bf = boost::filesystem;
    8. unsigned int getLines(std::ifstream &file)
    9. {
    10. unsigned int lines = 0;
    11. std::string line;
    12. while(getline(file, line))
    13. {
    14. lines++;
    15. }
    16. return lines;
    17. }
    18. int main(int arg, char *argv[])
    19. {
    20. std::vector<bf::path> files;
    21. struct group
    22. {
    23. std::string type;
    24. unsigned long size;
    25. unsigned int files;
    26. unsigned long lines;
    27. group(std::string name)
    28. {
    29. group::type = name;
    30. group::size = 0;
    31. group::files = 0;
    32. group::lines = 0;
    33. }
    34. };
    35. group php("php");
    36. group js("ja");
    37. bf::directory_iterator iterator(std::string("C:\\development\\xampp\\htdocs\\DeepUniverse\\"));
    38. bf::path path;
    39. std::ifstream file;
    40. while(iterator != bf::directory_iterator())
    41. {
    42. path = iterator->path();
    43. if(bf::is_regular_file(bf::status(path)) && bf::extension(path) == ".php")
    44. {
    45. file.open((path.string()).c_str());
    46. php.size += bf::file_size(path);
    47. php.lines += getLines(file);
    48. php.files++;
    49. }
    50. if(bf::is_regular_file(bf::status(path)) && bf::extension(path) == ".js")
    51. {
    52. file.open((path.string()).c_str());
    53. js.size += bf::file_size(path);
    54. js.lines += getLines(file);
    55. js.files++;
    56. }
    57. iterator++;
    58. }
    59. std::cout << php.type << std::endl << std::endl
    60. << "Dateien : " << php.files << std::endl
    61. << "Gesamtgröße : " << php.size << std::endl
    62. << "Zeilen : " << php.lines << std::endl;
    63. std::cout << js.type << std::endl << std::endl
    64. << "Dateien : " << js.files << std::endl
    65. << "Gesamtgröße : " << js.size << std::endl
    66. << "Zeilen : " << js.lines << std::endl;
    67. return 0;
    68. }
    Alles anzeigen


    Für die Eigenschaften hab ich ein struct verwendet. Da mir momentan das alles zu "undynamisch" ist würde ich das struct gerne in eine Map packen, deren Elemente dann aus einer INI-Datei ausgelesen werden. Wenn als in der ini 'type=php|js|img|ttf;' sollen automatisch 4 Map Elemente mit den jewiligen Dateinamen als Index und dem Struct als Eigenschaften.

    In etwa so:

    Quellcode

    1. std::map<std::string, group> categories;
    2. categories["php"].type = "php";
    3. categories["php"].size = 45178;


    MinGW spuckt das als Error raus: M:\data\CB Projects\count\main.cpp|45|Fehler: Templateargument für »template<class _T1, class _T2> struct std::pair« verwendet lokalen Typ »main(int, char**)::group«|

    Da ich bis gerade eben im Glauben war, dass ein Struct wie eine Klasse behandelt wird bin ich etwas ratlos. Hat von euch jemand eine Idee wie man das Problem lösen kann, oder eine alternative Möglichkeit?

    Dankeschön ;)