首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TBB插入无序boost bimap

使用TBB插入无序boost bimap
EN

Stack Overflow用户
提问于 2018-03-07 07:00:33
回答 1查看 111关注 0票数 1

关于TBB,我非常困惑。我试图在无序的bimap中插入<key, value>对,其中keyuint64_t类型,valuestring类型。我尝试创建loop object,它位于TBB.h文件中,如下所示

代码语言:javascript
复制
void ParallelIndex(uint64_t &kmer_len, std::string &split_kmer, std::string &sequence_content,
            uint64_t &sequence_length, size_t &kmer_position ) {
        parallel_for( blocked_range<size_t>(0, sequence_length),
                [&](const blocked_range<size_t>& r) {
            for(i = r.begin(); i < r.end();  ++i ){
                split_kmer = sequence_content.substr(i, kmer_len);
                reference_index_vector.insert(position(kmer_position, split_kmer)); 
                i += kmer_len-1;
                kmer_position += kmer_len;

                }
        }
        );
    }

main函数中,在TBB.cpp中,我尝试调用该函数

代码语言:javascript
复制
index.ParallelIndex(index.kmer_len, index.split_kmer, index.sequence_content,
        index.sequence_length, index.kmer_position );

它以0开头,贯穿n。我试图将i增量5(第一个++ii +=kmer_len-1,像i = 0, 5, 10, 15, ...直到n),但是i只增加1。

完整代码如下所示:

TBB.cpp

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <algorithm>
#include <boost/bimap.hpp>
#include <boost/bimap/unordered_set_of.hpp>
#include <boost/bimap/unordered_multiset_of.hpp>
#include "tbb/parallel_for.h"
#include "TBB.h"
#include "tbb/tbb.h"
#include <tbb/blocked_range.h>



using namespace tbb;


namespace bimaps = boost::bimaps;
typedef boost::bimap<bimaps::unordered_set_of<uint64_t>,
        bimaps::unordered_multiset_of<std::string> > bimap_reference;
typedef bimap_reference::value_type position;
bimap_reference reference_index_vector;



uint64_t thread_test::create_index::kmer_len = 5;
std::string thread_test::create_index::split_kmer = "";
std::string thread_test::create_index::sequence_content = "ABCDDBACDDDCBBAAACBDAADCBDAAADCBDADADACBDDCBBBCDCBCDAADCBBCDAAAD";
uint64_t thread_test::create_index::sequence_length = 0;
size_t thread_test::create_index::kmer_position = 0;
size_t thread_test::create_index::i = 0;
int main(){
    thread_test::create_index index;
    index.sequence_length = index.sequence_content.length();

    index.ParallelIndex(index.kmer_len, index.split_kmer, index.sequence_content,
            index.sequence_length, index.kmer_position );

    for( bimap_reference::const_iterator iter = reference_index_vector.begin(), iend = reference_index_vector.end();
                iter != iend; ++iter ) {
            std::cout << iter->left << " <--> "<< iter->right <<std::endl;
        }

}

TBB.h

代码语言:javascript
复制
#ifndef TBB_H_
#define TBB_H_

#include<iostream>
#include <algorithm>
#include <utility>
#include <boost/bimap.hpp>
#include <boost/bimap/unordered_set_of.hpp>
#include <boost/bimap/unordered_multiset_of.hpp>
#include "tbb/tbb.h"
#include <tbb/parallel_for.h>
#include <tbb/blocked_range.h>
#include <tbb/mutex.h>


using namespace tbb;


namespace bimaps = boost::bimaps;

typedef boost::bimap<bimaps::unordered_set_of<uint64_t>,
        bimaps::unordered_multiset_of<std::string > > bimap_reference;
typedef bimap_reference::value_type position;
extern bimap_reference reference_index_vector;



namespace thread_test{

class create_index{

public:
    static uint64_t kmer_len;
    static std::string split_kmer;
    static std::string sequence_content;
    static uint64_t sequence_length;
    static size_t kmer_position;
    static size_t i;

//  using lambda function

    void ParallelIndex(uint64_t &kmer_len, std::string &split_kmer, std::string &sequence_content,
            uint64_t &sequence_length, size_t &kmer_position ) {
        parallel_for( blocked_range<size_t>(0, sequence_length),
                [&](const blocked_range<size_t>& r) {
            for(i = r.begin(); i < r.end();  ++i ){
                split_kmer = sequence_content.substr(i, kmer_len);
                reference_index_vector.insert(position(kmer_position, split_kmer));
                i += kmer_len-1;
                kmer_position += kmer_len;
                }
        }
        );
    }
};
}

#endif /* TBB_H_ */

问题是i的增量为1,但正如上面提到的,我尝试将其增加5。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-09 12:03:33

for(i = r.begin(); i < r.end(); ++i )更改为for(; i < r.end(); ++i )。在第一种情况下,您正在重新初始化i = r.begin()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49145957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档