LINUX.ORG.RU

История изменений

Исправление wota, (текущая версия) :

взял вариант quasimoto за основу:

#include <algorithm>
#include <iostream>
#include <map>
#include <vector>
using namespace std;

template<class Source, class Destination, class Predicate>
void copy_if( const Source& s, Destination& d, Predicate pred ) {
    copy_if( s.begin(), s.end(), inserter( d, d.begin() ), pred );
}

using SubMap = map<string, vector<string>>;
template <typename T> using Map = map<T, SubMap>;

template <typename T>
static Map<T> compressDependencies(Map<T> const& dependencies) {
    Map<T> result;
    for (auto & entry : dependencies) {
        copy_if( entry.second, result[ entry.first ],
            [](const SubMap::value_type& subEntry) { return subEntry.second.size(); });
    }
    return result;
}

int main() {
    Map<int> m;
    m[0]["1"] = {};
    m[0]["2"] = { "0" };
    cout << m[0].size() << '\n';

    Map<int> r = compressDependencies( m );
    cout << r[0].size() << '\n';
}
~$ g++ -std=c++11 1.cpp
~$ ./a.out 
2
1

Исправление wota, :

взял вариант quasimoto за основу:

#include <algorithm>
#include <iostream>
#include <map>
#include <vector>
using namespace std;

template<class Source, class Destination, class Predicate>
void copy_if( const Source& s, Destination& d, Predicate pred ) {
    copy_if( s.begin(), s.end(), inserter( d, d.begin() ), pred );
}

using SubMap = map<string, vector<string>>;
template <typename T> using Map = map<T, SubMap>;


template <typename T>
static Map<T> compressDependencies(Map<T> const& dependencies) {
    Map<T> result;
    for (auto & entry : dependencies) {
        copy_if( entry.second, result[ entry.first ],
            [](const SubMap::value_type& subEntry) { return subEntry.second.size(); });
    }
    return result;
}

int main() {
    Map<int> m;
    m[0]["1"] = {};
    m[0]["2"] = { "0" };
    cout << m[0].size() << '\n';

    Map<int> r = compressDependencies( m );
    cout << r[0].size() << '\n';
}
~$ g++ -std=c++11 1.cpp
~$ ./a.out 
2
1

Исходная версия wota, :

взял вариант quasimoto за основу:

#include <algorithm>
#include <iostream>
#include <map>
#include <vector>
using namespace std;

template<class Source, class Destination, class Predicate>
void copy_if( const Source& s, Destination& d, Predicate pred ) {
    copy_if( s.begin(), s.end(), inserter( d, d.begin() ), pred );
}

using SubMap = map<string, vector<string>>;
template <typename T> using Map = map<T, SubMap>;


template <typename T>
static Map<T> compressDependencies(Map<T> const& dependencies) {
    Map<T> result;
    for (auto & entry : dependencies) {
        copy_if( entry.second, result[ entry.first ],
            [](const SubMap::value_type& subEntry) { return subEntry.second.size(); }
        );
    }
    return result;
}

int main() {
    Map<int> m;
    m[0]["1"] = {};
    m[0]["2"] = { "0" };
    cout << m[0].size() << '\n';

    Map<int> r = compressDependencies( m );
    cout << r[0].size() << '\n';
}
~$ g++ -std=c++11 1.cpp
~$ ./a.out 
2
1